Use to create a block of of code which should execute with interrupts temporarily turned off.
-
Do not use CRITICAL and INTERRUPT attributes for a function added via add_VBL() (or LCD, etc). The attributes are only required when constructing a bare jump from the interrupt vector itself.
Indicate to the compiler the function will be used as an interrupt handler.
-
Do not use CRITICAL and INTERRUPT attributes for a function added via add_VBL() (or LCD, etc). The attributes are only required when constructing a bare jump from the interrupt vector itself.
The results are in BGB clock units, which are "1 nop in [CGB] doublespeed mode".
-
So when running in Normal Speed mode (i.e. non-CGB doublespeed) the printed result should be divided by 2 to get the actual ellapsed cycle count.
-
If running in CB Double Speed mode use the below call instead, it correctly compensates for the speed difference. In this scenario, the result does not need to be divided by 2 to get the ellapsed cycle count.
Print the string and arguments given by format to the BGB emulator debug message window
-
Parameters
-
-
format
The format string as per printf
-
-
-
-
Does not return the number of characters printed. Result string MUST BE LESS OR EQUAL THAN 128 BYTES LONG, INCLUDING THE TRAILIG ZERO BYTE!
-
Currently supported:
-
%hx (char as hex)
-
%hu (unsigned char)
-
%hd (signed char)
-
%c (character)
-
%u (unsigned int)
-
%d (signed int)
-
%x (unsigned int as hex)
-
%s (string)
-
-
Warning: to correctly pass chars for printing as chars, they must be explicitly re-cast as such when calling the function. See docs_chars_varargs for more details.
Writing games and other programs with GBDK will be much easier with a basic understanding of the C language. In particular, understanding how to use C on "Embedded Platforms" (small computing systems, such as the Game Boy) can help you write better code (smaller, faster, less error prone) and avoid common pitfals.
In addition to understanding the C language it's important to learn how the Game Boy hardware works. What it is capable of doing, what it isn't able to do, and what resources are available to work with. A good way to do this is by reading the Pandocs and checking out the awesome_gb list.
-
+
Writing optimal C code for the Game Boy and SDCC
The following guidelines can result in better code for the Game Boy, even though some of the guidance may be contrary to typical advice for general purpose computers that have more resources and speed.
-
+
Tools
-
+
GBTD / GBMB, Arrays and the "const" keyword
Important: The old GBTD/GBMB fails to include the const keyword when exporting to C source files for GBDK. That causes arrays to be created in RAM instead of ROM, which wastes RAM, uses a lot of ROM to initialize the RAM arrays and slows the compiler down a lot.
Instead of using a blocking delay() for things such as sprite animations/etc (which can prevent the rest of the game from continuing) many times it's better to use a counter which performs an action once every N frames. sys_time may be useful in these cases.
-
When processing for a given frame is done and it is time to wait before starting the next frame, wait_vbl_done() can be used. It uses HALT to put the CPU into a low power state until processing resumes. The CPU will wake up and resume processing at the end of the current frame when the Vertical Blanking interrupt is triggered.
+
When processing for a given frame is done and it is time to wait before starting the next frame, wait_vbl_done() can be used. It uses HALT to put the CPU into a low power state until processing resumes. The CPU will wake up and resume processing at the end of the current frame when the Vertical Blanking interrupt is triggered.
Minimize use of multiplication, modulo with non-powers of 2, and division with non-powers of 2. These operations have no corresponding CPU instructions (software functions), and hence are time costly.
SDCC has some optimizations for:
Division by powers of 2. For example n /= 4u will be optimized to n >>= 2.
@@ -181,15 +182,15 @@ Code structure
Use inline functions if the function is short. (with the inline keyword, such as inline uint8_t myFunction() { ... })
Do not use recursive functions
-
+
GBDK API/Library
stdio.h: If you have other ways of printing text, avoid including stdio.h and using functions such as printf(). Including it will use a large number of the background tiles for font characters. If stdio.h is not included then that space will be available for use with other tiles instead.
drawing.h: The Game Boy graphics hardware is not well suited to frame-buffer style graphics such as the kind provided in drawing.h. Due to that, most drawing functions (rectangles, circles, etc) will be slow . When possible it's much faster and more efficient to work with the tiles and tile maps that the Game Boy hardware is built around.
-
waitpad() and waitpadup check for input in a loop that doesn't HALT at all, so the CPU will be maxed out until it returns. One alternative is to write a function with a loop that checks input with joypad() and then waits a frame using wait_vbl_done() (which idles the CPU while waiting) before checking input again.
-
joypad(): When testing for multiple different buttons, it's best to read the joypad state once into a variable and then test using that variable (instead of making multiple calls).
+
waitpad() and waitpadup check for input in a loop that doesn't HALT at all, so the CPU will be maxed out until it returns. One alternative is to write a function with a loop that checks input with joypad() and then waits a frame using wait_vbl_done() (which idles the CPU while waiting) before checking input again.
+
joypad(): When testing for multiple different buttons, it's best to read the joypad state once into a variable and then test using that variable (instead of making multiple calls).
Learn some ASM and inspect the compiler output to understand what the compiler is doing and how your code gets translated. This can help with writing better C code and with debugging.
-
+
chars and vararg functions
In standard C when chars are passed to a function with variadic arguments (varargs, those delcared with ... as a parameter), such as printf(), those chars get automatically promoted to ints. For an 8 bit cpu such as the Game Boy's, this is not as efficient or desireable in most cases. So the default SDCC behavior, which GBDK-2020 expects, is that chars will remain chars and not get promoted to ints when explicitly cast as chars while calling a varargs function.
@@ -227,16 +228,16 @@ printf("%hx %hx", i, i);
// The output will be: 5A 5A
printf("%hx %hx", (unsigned char)i, (unsigned char)i);
Update and verify this section for the modernized SDCC and toolchain
For many applications C is fast enough but in intensive functions are sometimes better written in assembler. This section deals with interfacing your core C program with fast assembly sub routines.
-
+
Calling convention
sdcc in common with almost all C compilers prepends a '_' to any function names. For example the function printf(...) begins at the label _printf::. Note that all functions are declared global.
The parameters to a function are pushed in right to left order with no aligning - so a byte takes up a byte on the stack instead of the more natural word. So for example the function int store_byte( uint16_t addr, uint8_t byte) would push 'byte' onto the stack first then addr using a total of three bytes. As the return address is also pushed, the stack would contain:
At SP+0 - the return address
@@ -246,11 +247,11 @@ Calling convention
At SP+4 - byte
Note that the arguments that are pushed first are highest in the stack due to how the Game Boy's stack grows downwards.
The function returns in DE.
-
+
Variables and registers
C normally expects registers to be preserved across a function call. However in the case above as DE is used as the return value and HL is used for anything, only BC needs to be preserved.
Getting at C variables is slightly tricky due to how local variables are allocated on the stack. However you shouldn't be using the local variables of a calling function in any case. Global variables can be accessed by name by adding an underscore.
-
+
Segments
The use of segments for code, data and variables is more noticeable in assembler. GBDK and SDCC define a number of default segments - _CODE, _DATA and _BSS. Two extra segments _HEADER and _HEAP exist for the Game Boy header and malloc heap respectively.
The order these segments are linked together is determined by crt0.s and is currently _CODE in ROM, then _DATA, _BSS, _HEAP in WRAM, with STACK at the top of WRAM. _HEAP is placed after _BSS so that all spare memory is available for the malloc routines. To place code in other than the first two banks, use the segments _CODE_x where x is the 16kB bank number.
GBDK includes several example programs both in C and in assembly. They are located in the examples directory, and in its subdirectories. They can be built by typing make in the correnponding directory.
-
+
banks (various projects)
There are several different projects showing how to use ROM banking with GBDK.
-
+
comm
Illustrates how to use communication routines.
-
+
crash
Demonstrates how to use the optional GBDK crash handler which dumps debug info to the Game Boy screen in the event of a program crash.
-
+
colorbar
The colorbar program, written by Mr. N.U. of TeamKNOx, illustrates the use of colors on a Color GameBoy.
-
+
dscan
Deep Scan is a game written by Mr. N.U. of TeamKNOx that supports the Color GameBoy. Your aim is to destroy the submarines from your boat, and to avoid the projectiles that they send to you. The game should be self-explanatory. The following keys are used:
RIGHT/LEFT : Move your boat
A/B : Send a bomb from one side of your boat
@@ -113,28 +114,28 @@ When game is paused:
SELECT : Invert A and B buttons
RIGHT/LEFT : Change speed
UP/DOWN : Change level
-
+
filltest
Demonstrates various graphics routines.
-
+
fonts
Examples of how to work with the built in font and printing features.
-
+
galaxy
A C translation of the space.s assembly program.
-
+
gb-dtmf
The gb-dtmf, written by Osamu Ohashi, is a Dual Tone Multi-Frequency (DTMF) generator.
-
+
gbdecompress
Demonstrates using gbdecompress to load a compressed tile set into vram.
-
+
irq
Illustrates how to install interrupt handlers.
-
+
large map
Shows how to scroll with maps larger than 32 x 32 tiles using set_bkg_submap(). It fills rows and columns at the edges of the visible viewport (of the hardware Background Map) with the desired sub-region of the large map as it scrolls.
-
+
metasprites
Demonstrates using the metasprite features to move and animate a large sprite.
Press A button to show / hide the metasprite
@@ -142,31 +143,31 @@ metasprites
Press SELECT button to cycle the metasprite through Normal / Flip-Y / Flip-XY / Flip-X
Up / Down / Left / Right to move the metasprite
-
+
lcd isr wobble
An example of how to use the LCD ISR for visual special effects
-
+
paint
The paint example is a painting program. It supports different painting tools, drawing modes, and colors. At the moment, it only paints individual pixels. This program illustrates the use of the full-screen drawing library. It also illustrates the use of generic structures and big sprites.
Arrow keys : Move the cursor
SELECT : Display/hide the tools palette
A : Select tool
-
+
rand
The rand program, written by Luc Van den Borre, illustrates the use of the GBDK random generator.
-
+
ram_fn
The ram_fn example illustrates how to copy functions to RAM or HIRAM, and how to call them from C.
-
+
rpn
A basic RPN calculator. Try entering expressions like 12 134* and then 1789+.
-
+
samptest
Demonstration of playing a sound sample.
-
+
sgb (various)
A collection of examples showing how to use the Super Game Boy API features.
-
+
sound
The sound example is meant for experimenting with the soung generator of the GameBoy (to use on a real GameBoy). The four different sound modes of the GameBoy are available. It also demonstrates the use of bit fields in C (it's a quick hack, so don't expect too much from the code). The following keys are used:
UP/DOWN : Move the cursor
RIGHT/LEFT : Increment/decrement the value
@@ -176,14 +177,14 @@ START : Play the current mode's sound (or all modes if in control screen)
START+A : Play a little music with the current mode's sound
SELECT : Change the sound mode (1, 2, 3, 4 and control)
SELECT+A : Dump the sound registers to the screen
-
+
space
The space example is an assembly program that demonstrates the use of sprites, window, background, fixed-point values and more. The following keys are used:
Arrow keys : Change the speed (and direction) of the sprite
Arrow keys + A : Change the speed (and direction) of the window
Arrow keys + B : Change the speed (and direction) of the background
START : Open/close the door
SELECT : Basic fading effect
-
+
templates
Two basic template examples are provided as a starting place for writing your GBDK programs.
The simplest way is to use the Game Boy sound hardware directly. See the Sound Example for a way to test out sounds on the hardware.
-
Further discussion on using the Sound Example rom can be found in the ZGB wiki. Note that some example code there is ZGB specific and not part of the base GBDK API: https://github.com/Zal0/ZGB/wiki/Sounds
+
Further discussion on using the Sound Example rom can be found in the ZGB wiki. Note that some example code there is ZGB specific and not part of the base GBDK API: https://github.com/Zal0/ZGB/wiki/Sounds
+
+
+
+
+Graphics and Resources
+
+
How do I use a tile map when it's tiles don't start at index zero?
How do I move the start of the DATA section and the Shadow OAM location?
+
The default locations are: _shadow_OAM=0xC000 and 240 bytes after it _DATA=0xC0A0
+
So, for example, if you wanted to move them both to start 256(0x100) bytes later, use these command line arguments for LCC:
+
To change the Shadow OAM address: -Wl-g_shadow_OAM=0xC100
+
To change the DATA address (again, 240 bytes after the Shadow OAM): -Wl-b_DATA=0xc1a0
-
+
+
+
+
+
+
+
API / Utilities
Is there a list of all functions in the API?
@@ -189,7 +214,7 @@ API / Utilities
-
How can maps larger than 32x32 tiles be scrolled? & Why is the map wrapping around to the left side when setting a map wider than 32 tiles with set_bkg_data()?
+
How can maps larger than 32x32 tiles be scrolled? & Why is the map wrapping around to the left side when setting a map wider than 32 tiles with set_bkg_data()?
The hardware Background map is 32 x 32 tiles. The screen viewport that can be scrolled around that map is 20 x 18 tiles. In order to scroll around within a much larger map, new tiles must be loaded at the edges of the screen viewport in the direction that it is being scrolled. set_bkg_submap can be used to load those rows and columns of tiles from the desired sub-region of the large map.
Writes that exceed coordinate 31 of the Background tile map on the x or y axis will wrap around to the Left and Top edges.
diff --git a/docs/api/docs_getting_started.html b/docs/api/docs_getting_started.html
index 0f7e7554..8d35ed46 100644
--- a/docs/api/docs_getting_started.html
+++ b/docs/api/docs_getting_started.html
@@ -29,6 +29,7 @@
Make sure your GBDK-2020 installation is working correctly by compiling some of the included example projects.
+
If everything in works in the steps below and there are no errors reported then each project that was build should have it's on .gb ROM file (or suitable extension for the other supported targets).
+
+Windows (without Make installed):
+
Navigate to a project within the example projects folder ("examples\gb\" under your GBDK-2020 install folder) and open a command line. Then type:
compile
+
or
compile.bat
+
This should build the example project. You can also navigate into other example project folders and build in the same way.
+
+Linux / MacOS / Windows with Make installed:
Navigate to the example projects folder ("examples/gb/" under your GBDK-2020 install folder) and open a command line. Then type:
make
This should build all of the examples sequentially. You can also navigate into an individual example project's folder and build it by typing make.
-
If everything works and there are no errors reported each example sub-folder should have it's on .gb ROM file.
-
+
3. Use a Template
To create a new project use a template!
There are template projects included in the GBDK example projects to help you get up and running. Their folder names start with template_.
Type make on the command line in that folder to verify it still builds.
Open main.c to start making changes.
-
+
4. If you use GBTD / GBMB, get the fixed version
If you plan to use GBTD / GBMB for making graphics, make sure to get the version with the const fix and other improvements. See const_gbtd_gbmb.
-
+
5. Review Coding Guidelines
Take a look at the coding guidelines, even if you have experience writing software for other platforms. There is important information to help you get good results and performance on the Game Boy.
If you have a specific project in mind, consider what hardware want to target. It isn't something that has to be decided up front, but it can influence design and implementation.
Tracking down problems in code is easier with a debugger. Emulicious has a debug adapter that provides C source debugging with GBDK-2020.
-
+
8. Try a GBDK Tutorial
You might want to start off with a guided GBDK tutorial from the GBDK Tutorials section.
Note: Tutorials (or parts of them) may be based on the older GBDK from the 2000's before it was updated to be GBDK-2020. The general principals are all the same, but the setup and parts of the toolchain (compiler/etc) may be somewhat different and some links may be outdated (pointing to the old GBDK or old tools).
Several popular GBDK Tutorials, Videos and How-to's were made before GBDK-2020 was available, as a result some information they include is outdated or incompatible. The following summarizes changes that should be made for best results.
GBDK-2020 now supports auto-banking (rom_autobanking). In most cases using auto-banking will be easier and less error prone than manually assigning source and assets to banks.
+
There is a source example banks_autobank project.
+
+
+Non-standard types (UINT8, etc)
+
The old GBDK types UINT8, INT8, UINT16, INT16 are non-standard and less portable.
+
The following should be used instead: uint8_t, int16_t, uint16_t, int32_t, uint32_t and bool.
+
These are standard types defined in stdint.h (#include <stdint.h>) and stdbool.h (#include <stdbool.h>).
+
+If using GBTD / GBMB, get the fixed version
+
If you plan to use GBTD / GBMB for making graphics, make sure to get the version with the const fix and other improvements. See const_gbtd_gbmb.
+
+LCC and SDCC flags that are not needed
+
The following flag is no longer needed with lcc and sdcc, it can be removed without any loss of performance.
Setting ROM bytes directly with -Wl-yp0x<address>=0x<value> is no longer supported. Instead use makebin flags. For example, use -Wm-yC instead of -Wl-yp0x143=0xC0. See faq_gb_type_header_setting.
+
+GBDK Header include changes
+
The following header files which are now cross platform were moved from gb/ to gbdk/: bcd.h, console.h, far_ptr.h, font.h, gbdecompress.h, gbdk-lib.h, incbin.h, metasprites.h, platform.h, version.h
+
When including them use #include <gbdk/...> instead of #include <gb/>
+
+
+Include .h headers, not .c source files
+
Do not #include.c source files into other .c source files. Instead create .h header files for them and include those.
Modern project templates are included with GBDK-2020. Using them (and their Makefile or compile.bat) as a starting point for projects is recommended and can help ensure better default settings and project organization.
+
+Use hUGEtracker instead of gbt_player
+
hUGEtracker and it's driver hUGEdriver are smaller, more efficient and more versatile than gbt_player.
This is a brief list of useful tools and information. It is not meant to be complete or exhaustive, for a larger list see the Awesome Game Boy Development list.
-
+
SDCC Compiler Suite User Manual
GBDK-2020 uses the SDCC compiler and related tools. The SDCC manual goes into much more detail about available features and how to use them.
@@ -99,7 +100,7 @@ SDCC Compiler Suite User Manual
SMS Power!
Community site with technical documentation, reviews and other content related to the Sega 8-bit systems. https://www.smspower.org/
-
+
Tutorials
+
Larold's Jubilant Junkyard Tutorials
+ Several walk throughs about the fundamentals of developing for the Game Boy with GBDK-2020. There are simple examples with source code. https://laroldsjubilantjunkyard.com/tutorials/
Add line-by-line C source code to the main symbol file in a BGB compatible format. This allows for C source-like debugging in BGB in a limited way. https://gbdev.gg8.se/forums/viewtopic.php?id=710
-
+
Continuous Integration and Deployment
GBDK GitHub Action Builder A Github Action which provides basic CI/CD for building projects based on GBDK (not for building GBDK itself).
diff --git a/docs/api/docs_migrating_versions.html b/docs/api/docs_migrating_versions.html
index 82be2c61..bbadd99f 100644
--- a/docs/api/docs_migrating_versions.html
+++ b/docs/api/docs_migrating_versions.html
@@ -29,6 +29,7 @@
GBDK 2020 Docs
+ 4.0.6
API Documentation for GBDK 2020
@@ -90,9 +91,17 @@ $(document).ready(function(){initNavTree('docs_migrating_versions.html',''); ini
This section contains information that may be useful to know or important when upgrading to a newer GBDK release.
-
+
GBDK 2020 versions
-
+
+Porting to GBDK 2020 4.0.6
+
+
Renamed bgb_emu.h to emu_debug.h and BGB_* functions to EMU_*
+
Aliases for the BGB_* ones and a bgb_emu.h shim are present for backward compatibility, but updating to the new naming is recommended
+
+
+
+
Porting to GBDK 2020 4.0.5
GBDK now requires SDCC 12259 or higher with GBDK-2020 patches
@@ -108,18 +117,18 @@ Porting to GBDK 2020 4.0.5
-
+
Porting to GBDK 2020 4.0.4
GBDK now requires SDCC 12238 or higher
Made sample.h, cgb.h and sgb.h independent from gb.h
-
+
Porting to GBDK 2020 4.0.3
No significant changes required
-
+
Porting to GBDK 2020 4.0.2
The default font has been reduced from 256 to 96 characters.
@@ -128,7 +137,7 @@ Porting to GBDK 2020 4.0.2
-
+
Porting to GBDK 2020 4.0.1
Important! : The WRAM memory region is no longer automatically initialized to zeros during startup.
@@ -140,7 +149,7 @@ Porting to GBDK 2020 4.0.1
In .ihx files, multiple writes to the same ROM address are now warned about using ihxcheck.
set_*_tiles() now wrap maps around horizontal and vertical boundaries correctly. Code relying on it not wrapping correctly may be affected.
-
+
Porting to GBDK 2020 4.0
GBDK now requires SDCC 4.0.3 or higher
@@ -152,22 +161,22 @@ Porting to GBDK 2020 4.0
Setting ROM bytes directly with -Wl-yp0x<address>=0x<value> is no longer supported. Instead use makebin flags. For example, use -Wm-yC instead of -Wl-yp0x143=0xC0. See faq_gb_type_header_setting.
OAM symbol has been renamed to _shadow_OAM, that allows accessing shadow OAM directly from C code
Changed itoa(), uitoa(), ltoa(), ultoa() to now require a radix value (base) argument to be passed. On the Game Boy and Analogue Pocket the parameter is required but not utilized.
Added gbdecompress: de-compressing tile data into vram
Added metasprites: show creating a large sprite with the new metasprite api
Added template projects
@@ -266,7 +338,7 @@ GBDK 2020 4.0.3
-
+
GBDK 2020 4.0.2
2021/01/17
Includes SDCC snapshot build version 12016 (has a fix for duplicate debug symbols generated from inlined header functions which GBDK 4.0+ uses)
@@ -279,7 +351,7 @@ GBDK 2020 4.0.2
safer copy-to-VRAM functions
loading of 1bit data fixed, also now it is possible to specify pixel color
Improved code generation for the GBDK Library with SDCC switch on by default: --max-allocs-per-node 50000
-
fixed wrong parameter offsets in hiramcpy() (broken ram_function example)
+
fixed wrong parameter offsets in hiramcpy() (broken ram_function example)
Multiple minor improvements
@@ -290,7 +362,7 @@ GBDK 2020 4.0.2
Examples: Added bgb debug example
-
+
GBDK 2020 4.0.1
2020/11/14
Updated API documentation
@@ -300,7 +372,7 @@ GBDK 2020 4.0.1
new fill_*_rect() functions to clear rectangle areas
runtime initialization code now does not initialize whole WRAM with zeros anymore, that allows BGB to raise exceptions when code tries to read WRAM that was not written before.
GBDK now requires SDCC 4.0.3 or higher, that has fully working toolchain. Old link-gbz80 linker is not used anymore, sdldgb and makebin are used to link objects and produce binary roms; maccer tool is no longer needed either
@@ -345,19 +417,19 @@ GBDK 2020 4.0
-
+
GBDK 2020 3.2
2020/06/05
Fixed OAM initialization that was causing a bad access to VRAM
Interrupt handlers now wait for lcd controller mode 0 or 1 by default to prevent access to inaccessible VRAM in several functions (like set_bkg_tiles)
Several optimizations here and there
-
+
GBDK 2020 3.1.1
2020/05/17
Fixed issues with libgcc_s_dw2-1.dll
-
+
GBDK 2020 3.1
2020/05/16
Banked functions are working! The patcher is fully integrated in link-gbz80, no extra tools are needed. It is based on Toxa's work
@@ -375,21 +447,21 @@ GBDK 2020 3.1
-
+
GBDK 2020 3.0.1
2020/04/12
Updated SDCC to v.4.0
Updated LCC to work with the new compiler
-
+
GBDK 2020 3.0
2020/04/12
Initial GBDK 2020 release
Updated SDCC to v4.0 The new linker is not working so the old version is still there There is an issue with sdagb compiling drawing.s (the JP in line 32 after ".org .MODE_TABLE+4*.G_MODE" it's writing more than 4 bytes invading some addresses required by input.s:41) Because of this, all .s files in libc have been assembled with the old as-gbz80 and that's why it is still included
-
+
Historical GBDK Release Notes
-
+
GBDK 2.96
17 April, 2000
Many changes.
@@ -399,7 +471,7 @@ GBDK 2.96
Added full 32 bit long support.
Still no floating pt support.
-
+
GBDK 2.95-3
19th August, 2000
@@ -411,7 +483,7 @@ GBDK 2.95-3
This is an experimental release for those who feel keen. The main change is a new lexer (the first part in the compilation process which recognises words and symbols like '!=' and 'char' and turns them into a token number) which speeds up compilation of large initialised arrays like tile data by a factor of three. Please report any bugs that show up - this is a big change.
I have also included a 'minimal' release for win32 users which omits the documentation, library sources, and examples. If this is useful I will keep doing it.
-
+
GBDK 2.95-2
5th August, 2000
Just a small update. From the README:
@@ -421,7 +493,7 @@ GBDK 2.95-2
Changed the ways globals are exported, reducing the amount of extra junk linked in.
Turned on the optimisations in flex. Large constant arrays like tile data should compile a bit faster.
-
+
GBDK 2.95
22nd July, 2000
Fixed 'a << c' for c = [9..15]
@@ -443,7 +515,7 @@ GBDK 2.95
7th July, 2000
Information on float and long support. Someone asked about the state of float/long support recently. Heres my reply:
long support is partly there, as is float support. The compiler will correctly recognise the long and float keywords, and will generate the code for most basic ops (+, -, &, | etc) for longs correctly and will generate the function calls for floats and hard long operations (*, /, %) correctly. However it wont generate float constants in the correct format, nor will it 'return' a long or float - gbdk doesn't yet support returning types of 4 bytes. Unfortunately its not going to make it into 2.95 as there's too much else to do, but I should be able to complete long support for 2.96
-
+
GBDK 2.94
7th May, 2000
Many fixes - see the README for more.
@@ -460,7 +532,7 @@ GBDK 2.94
-
+
GBDK 2.93
6th April, 2000
From the README
@@ -473,7 +545,7 @@ GBDK 2.93
The dscan demo now fully works (with a hack :)
There is a bug with cached computed values which are later used as pointers. When the value is first used as a BYTE arg, then later as a pointer the pointer fails as the high byte was never computed and is now missing. A temporary fix is to declare something appropriate as 'volatile' to stop the value being cached. See dscan.c/bombs() for an example.
-
+
GBDK 2.92-2 for win32
26th March, 2000
This is a maintenance release for win32 which fixes some of the niggly install problems, especially:
@@ -492,7 +564,7 @@ GBDK 2.92-2 for win32
Problems with the installer. It seems that the demo of InstallVISE has an unreasonably short time limit. I had planed to use the demo until the license key came through, but there's no sign of the key yet and the 3 day evaluation is up. If anyone knows of a free Windows installer with the ability to modify environment variables, please contact me. I hear that temporarily setting you clock back to the 15th works...
18th March, 2000
libc5 version available / "Error creating temp file" Thanks to Rodrigo Couto there is now a Linux/libc5 version of gbdk3-2.92 available - follow the download link above. At least it will be there when the main sourceforge site comes back up... Also some people have reported a bug where the compiler reports '*** Error creating temp file'. Try typing "mkdir c: tmp" from a DOS prompt and see if that helps.
-
+
GBDK 2.92
8th March, 2000
Better than 2.91 :). Can now be installed anywhere. All the demos work. See the README for more.
@@ -507,7 +579,7 @@ GBDK 2.92
-
+
GBDK 2.91
27th Feb, 2000
Better than 2.90 and includes Linux, win32 and a source tar ball. Some notes:
@@ -522,11 +594,11 @@ GBDK 2.91
Icehawk wrote "I did write some rumble pack routines. Just make sure to remind people to add -Wl-yt0x1C or -Wl-yt0x1D or -Wl-yt0x1E depending on sram and battery usage. Find the routines on my site (as usual). =)"
18th Oct, 1999
Bug tracking / FAQ up. Try the link on the left to report any bugs with GBDK. It's also the first place to look if your having problems.
-
+
GBDK 2.1.5
17th Oct, 1999
-
The compiler is the same, but some of the libraries have been improved. memset() and memcpy() are much faster, malloc() is fixed, and a high speed fixed block alternative malloc() was added.
+
The compiler is the same, but some of the libraries have been improved. memset() and memcpy() are much faster, malloc() is fixed, and a high speed fixed block alternative malloc() was added.
ROM/RAM Banking and MBCs (Memory Bank Controllers)
The standard Game Boy cartridge with no MBC has a fixed 32K bytes of ROM. In order to make cartridges with larger ROM sizes (to store more code and graphics) MBCs can be used. They allow switching between multiple ROM banks that use the same memory region. Only one of the banks can be selected as active at a given time, while all the other banks are inactive (and so, inaccessible).
-
+
Non-banked cartridges
Cartridges with no MBC controller are non-banked, they have 32K bytes of fixed ROM space and no switchable banks. For these cartridges the ROM space between 0000h and 7FFFh can be treated as a single large bank of 32K bytes, or as two contiguous banks of 16K bytes in Bank 0 at 0000h - 3FFFh and Bank 1 at 4000h to 7FFFh.
-
+
MBC Banked cartridges (Memory Bank Controllers)
Cartridges with MBCs allow the the Game Boy to work with ROMS up to 8MB in size and with RAM up to 128kB. Each bank is 16K Bytes.
Bank 0 of the ROM is located in the region at 0000h - 3FFFh. It is usually fixed (non-banked) and cannot be switched out for another bank.
The higher region at 4000h to 7FFFh is used for switching between different ROM banks.
See the Pandocs for more details about the individual MBCs and their capabilities.
-
+
Working with Banks
To assign code and constant data (such as graphics) to a ROM bank and use it:
Place the code for your ROM bank in one or several source files.
@@ -110,7 +111,7 @@ Working with Banks
Specify the number of banks and MBC type during link time.
When the program is running and wants to use data or call a function that is in a given bank, manually or automatically set the desired bank to active.
-
+
Setting the ROM bank for a Source file
The ROM and RAM bank for a source file can be set in a couple different ways. Multiple different banks cannot be assigned inside the same source file (unless the __addressmod method is used), but multiple source files can share the same bank.
If no ROM and RAM bank are speciied for a file then the default _CODE, _BSS and _DATA segments are used.
@@ -120,13 +121,13 @@ Setting the ROM bank for a Source file
#-Wl-yt<NN> where <NN> is one of the numbers below
#
@@ -155,17 +161,17 @@ Setting the MBC and number of ROM & RAM banks available
# F-ROM+MBC3+TIMER+BATT FF - Hudson HuC-1
# 10-ROM+MBC3+TIMER+RAM+BATT
# 11-ROM+MBC3
-
+
Getting Bank Numbers
The bank number for a banked function, variable or source file can be stored and retrieved using the following macros:
BANKREF(): Create a reference for retrieving the bank number of a variable or function
BANK(): Retrieve a bank number using a reference created with BANKREF()
BANKREF_EXTERN() - Make a BANKREF() reference residing in another source file accessible in the current file for use with BANK().
-
+
Banking and Functions
-
+
BANKED/NONBANKED keywords
BANKED:
@@ -184,7 +190,7 @@ BANKED/NONBANKED keywords
-
+
Banked Function Calls
Banked functions can be called as follows.
When defined with the BANKED keyword. Example: void my_function() BANKED { do stuff } in a source file which has had it's bank set (see above).
@@ -204,22 +210,22 @@ Banked Function Calls
Limitations:
SDCC banked calls and far_pointers in GBDK only save one byte for the ROM bank. So, for example, they are limtied to bank 31 max for MBC1 and bank 255 max for MBC5. This is due to the bank switching for those MBCs requiring a second, additional write to select the upper bits for more banks (banks 32+ in MBC1 and banks 256+ in MBC5).
Far pointers include a segment (bank) selector so they are able to point to addresses (functions or data) outside of the current bank (unlike normal pointers which are not bank-aware). A set of macros is provided by GBDK 2020 for working with far pointers.
Warning: Do not call the far pointer function macros from inside interrupt routines (ISRs). The far pointer function macros use a global variable that would not get restored properly if a function called that way was interrupted by another one called the same way. However, they may be called recursively.
You can manually switch banks using the SWITCH_ROM(), SWITCH_RAM(), and other related macros. See banks.c project for an example.
Note: You can only do a switch_rom_bank call from non-banked _CODE since otherwise you would switch out the code that was executing. Global routines that will be called without an expectation of bank switching should fit within the limited 16k of non-banked _CODE.
-
+
Restoring the current bank (after calling functions which change it without restoring)
If a function call is made (for example inside an ISR) which changes the bank without restoring it, then the _current_bank variable should be saved and then restored.
For example, instead of this code:
void vbl_music_isr(void)
@@ -240,12 +246,13 @@ Restoring the current bank (after calling functions which change it without rest
A ROM bank auto-assignment feature was added in GBDK 2020 4.0.2.
+
A ROM bank auto-assignment feature was added in GBDK 2020 4.0.2.
Instead of having to manually specify which bank a source file will reside it, the banks can be assigned automatically to make the best use of space. The bank assignment operates on object files, after compiling/assembling and before linking.
To turn on auto-banking, use the -autobank argument with lcc
For a source example see the banks_autobank project.
@@ -279,20 +286,20 @@ Auto-Banking
For example consider a fixed-bank source file growing too large to share a bank with an auto-banked source file that was previously assigned to it. To avoid a bank overflow it would be important to have the auto-banked file check every time whether it can share that bank or not.
Errors related to banking (overflow, multiple writes to same location)
A bank overflow during compile/link time (in makebin) is when more code and data are allocated to a ROM bank than it has capacity for. The address for any overflowed data will be incorrect and the data is potentially unreachable since it now resides at the start of a different bank instead of the end of the expected bank.
The current toolchain can only detect and warn (using ihxcheck) when one bank overflows into another bank that has data at its start. It cannot warn if a bank overflows into an empty one. For more complete detection, you can use the third-party romusage tool.
-
+
Bank space usage
In order to see how much space is used or remains available in a bank, you can use the third-party romusage tool.
-
+
Other important notes
The SWITCH_ROM_MBC5 macro is not interrupt-safe. If using less than 256 banks you may always use SWITCH_ROM - that is faster. Even if you use mbc5 hardware chip in the cart.
-
+
Banking example projects
There are several projects in the GBDK 2020 examples folder which demonstrate different ways to use banking.
@@ -90,23 +91,30 @@ $(document).ready(function(){initNavTree('docs_supported_consoles.html',''); ini
-
+
Consoles Supported by GBDK
As of version 4.0.5 GBDK includes support for other consoles in addition to the Game Boy.
+
Game Boy and related clones
Nintendo Game Boy / Game Boy Color (GB/GBC)
Analogue Pocket (AP)
+
Mega Duck / Cougar Boy (DUCK)
+
+
+
Sega Consoles
Sega Master System (SMS)
Sega Game Gear (GG)
+
+
While the GBDK API has many convenience functions that work the same or similar across different consoles, it's important to keep their different capabilities in mind when writing code intended to run on more than one. Some (but not all) of the differences are screen sizes, color abilities, memory layouts, processor type (z80 vs gbz80/sm83) and speed.
-
+
Cross Compiling for Different Consoles
-
+
lcc
When compiling and building through lcc use the -m<port>:<plat> flag to select the desired console via it's port and platform combination.
-
+
sdcc
When building directly with the sdcc toolchain, the following must be specified manually (when using lcc it will populate these automatically based on -m<port>:<plat>).
@@ -144,10 +157,10 @@ Console Port and Platform Settings
-
+
Cross-Platform Constants
There are several constant #defines that can be used to help select console specific code during compile time (with #ifdef, #ifndef) .
-
+
Console Identifiers
When <gb/gb.h> is included (either directly or through <gbdk/platform.h>)
@@ -161,6 +174,11 @@ Console Identifiers
ANALOGUEPOCKET will be #defined
+
When building for Mega Duck / Cougar Boy
+
NINTENDO will be #defined
+
MEGADUCK will be #defined
+
+
When <sms/sms.h > is included (either directly or through <gbdk/platform.h>)
@@ -177,7 +195,7 @@ Console Identifiers
-
+
Console Hardware Properties
Constants that describe properties of the console hardware are listed below. Their values will change to reflect the current console target that is being built.
Some include files under <gbdk/..> are cross platform and others allow the build process to auto-select the correct include file for the current target port and platform (console).
For example, the following can be used
#include <gbdk/platform.h>
@@ -198,14 +216,18 @@ Using <gbdk/...> headers
and
#include <sms/sms.h>
#include <sms/metasprites.h>
-
+
Cross Platform Example Projects
GBDK includes an number of cross platform example projects. These projects show how to write code that can be compiled and run on multiple different consoles (for example Game Boy and Game Gear) with, in some cases, minimal differences.
They also show how to build for multiple target consoles with a single build command and Makefile. The Makefile.targets allows selecting different port and plat settings when calling the build stages.
-
+
+Cross Platform Asset Example
+
The cross-platform Logo example project shows how assets can be managed for multiple different console targets together.
+
In the example utility_png2asset is used to generate assets in the native format for each console at compile-time from separate source PNG images. The Makefile is set to use the source PNG folder which matches the current console being compiled, and the source code uses set_native_tile_data() to load the assets tiles in native format.
+
Porting From Game Boy to Analogue Pocket
The Analogue Pocket is (for practical purposes) functionally identical to the Game Boy / Color, but has a couple altered register flag and address definitions and a different boot logo. In order for software to be easily ported to the Analogue Pocket, or to run on both, use the following practices.
-
+
Registers and Flags
Use API defined registers and register flags instead of hardwired ones
As long as the target console is set during build time then the correct boot logo will be automatically selected.
-
+
+Porting From Game Boy to Mega Duck / Cougar Boy
+
The Mega Duck is fairly similar to the classic Game Boy. It has a couple altered register flag and address definitions, no boot logo and a different startup/entry-point address. In order for software to be easily ported to the Mega Duck, or to run on both, use the following practices.
+
+Registers and Flags
+
Use API defined registers and register flags instead of hardwired ones
On the SMS/GG set_2bpp_palette() sets 4 colors that will be used when loading 2bpp assets with set_bkg_data(). This allows GB assets to be easily colorized without changing the asset format. There is some performance penalty for using the conversion.
On the SMS/GG set_2bpp_palette() sets 4 colors that will be used when loading 2bpp assets with set_bkg_data(). This allows GB assets to be easily colorized without changing the asset format. There is some performance penalty for using the conversion.
set_bkg_tiles() loads 1-byte-per-tile tilemaps both for the GB and SMS/GG
-
+
Tile and Map Data in Native Format
Use the following api calls when assets are avaialble in the native format for each platform.
Emulated Game Boy Color map attributes on the SMS/Game Gear
On the Game Boy Color, VBK_REG is used to select between the regular background tile map and the background attribute tile map (for setting tile color palette and other properties).
This behavior is emulated for the SMS/GG when using set_bkg_tiles() and VBK_REG. It allows writing a 1-byte tile map separately from a 1-byte attributes map.
Note
Tile map attributes on SMS/Game Gear use different control bits than the Game Boy Color, so a modified attribute map must be used.
-
+
Hardware Comparison
The specs below reflect the typical configuration of hardware when used with GBDK and is not meant as a complete list of their capabilities.
It is possible to change some of the important addresses used by the toolchain at link time using the -Wl-g XXX=YYY and =Wl-b XXX=YYY flags (where XXX is the name of the data, and YYY is the new address).
lcc will include the following linker defaults for sdldgb if they are not defined by the user.
@@ -141,7 +142,7 @@ Changing Important Addresses
-
+
Compiling programs
The lcc program is the front end compiler driver for the actual compiler, assembler and linker. It works out what you want to do based on command line options and the extensions of the files you give it, computes the order in which the various programs must be called and then executes them in order. Some examples are:
Compresses (and decompresses) binary file data with the gbcompress algorithm (also used in GBTD/GBMB). Decompression support is available in GBDK, see gb_decompress().
+
Compresses (and decompresses) binary file data with the gbcompress algorithm (also used in GBTD/GBMB). Decompression support is available in GBDK, see gb_decompress().
Can also compress (and decompress) using block style rle encoding with the --alg=rle flag. Decompression support is available in GBDK, see rle_decompress().
-
+
png2asset
Tool for converting PNGs into GBDK format MetaSprites and Tile Maps
Convert single or multiple frames of graphics into metasprite structured data for use with the ...metasprite...() functions.
When -map is used, converts images into Tile Maps and matching Tile Sets
+
Supports Game Boy 2bpp, GBC 4bpp, SGB 4bpp, and SMS/GG 4bpp
The origin (pivot) for the metasprite is not required to be in the upper left-hand corner as with regular hardware sprites. See -px and -py.
The conversion process supports using both SPRITES_8x8 (-spr8x8) and SPRITES_8x16 mode (-spr8x16). If 8x16 mode is used then the height of the metasprite must be a multiple of 16.
-
+
Terminology
The following abbreviations are used in this section:
Original Game Boy and Game Boy Pocket style hardware: DMG
Game Boy Color: CGB
-
+
Conversion Process
png2asset accepts any png as input, although that does not mean any image will be valid. The program will follow the next steps:
The image will be subdivided into tiles of 8x8 or 8x16
@@ -297,7 +302,7 @@ Conversion Process
Tiles will be matched without mirror, using vertical mirror, horizontal mirror or both (use -noflip to turn off matching mirrored tiles)
The palette won't be taken into account for matching, only the pixel color order, meaning there will be a match between tiles using different palettes but looking identical on grayscale
-
+
Maps
Passing -map the png can be converted to a map that can be used in both the background and the window. In this case, png2asset will generate:
The palettes
@@ -312,7 +317,7 @@ Maps
-
+
Meta sprites
By default the png will be converted to metasprites. The image will be subdivided into meta sprites of -sw x -sh. In this case png2asset will generate:
The metasprites, containing an array of:
@@ -322,8 +327,16 @@ Meta sprites
flags, containing the mirror info, the palettes for both DMG and GBC and the sprite priority
-
The metasprites array
+
The metasprites array
+
+Super Game Boy Borders (SGB)
+
Screen border assets for the Super Game Boy can be generated using png2asset.
+
The following flags should be used to perform the conversion:
Where <input_border_file.png> is the image of the SGB border (256x224) and <output_border_data.c> is the name of the source file to write the assets out to.
+
+
See the sgb_border example project for more details.
Interrupts allow execution to jump to a different part of your code as soon as an external event occurs - for example the LCD entering the vertical blank period, serial data arriving or the timer reaching its end count. For an example see the irq.c sample project.
Since an interrupt can occur at any time an Interrupt Service Request (ISR) cannot take any arguments or return anything. Its only way of communicating with the greater program is through the global variables. When interacting with those shared ISR global variables from main code outside the interrupt, it is a good idea to wrap them in a critical {} section in case the interrupt occurs and modifies the variable while it is being used.
Interrupts should be disabled before adding ISRs. To use multiple interrupts, logical OR the relevant IFLAGs together.
ISRs should be kept as small and short as possible, do not write an ISR so long that the Game Boy hardware spends all of its time servicing interrupts and has no time spare for the main code.
For more detail on the Game Boy interrupts consider reading about them in the Pandocs.
-
+
Available Interrupts
The GameBoy hardware can generate 5 types of interrupts. Custom Interrupt Service Routines (ISRs) can be added in addition to the built-in ones available in GBDK.
@@ -130,55 +131,56 @@ Available Interrupts
-
+
Adding your own interrupt handler
It is possible to install your own interrupt handlers (in C or in assembly) for any of these interrupts. Up to 4 chained handlers may be added, with the last added being called last. If the remove_VBL() function is to be called, only three may be added for VBL.
Interrupt handlers are called in sequence. To install a new interrupt handler, do the following:
Write a function (say foo()) that takes no parameters, and that returns nothing. Remember that the code executed in an interrupt handler must be short.
Inside a __critical { ... } section, install your interrupt handling routines using the add_XXX() function, where XXX is the interrupt that you want to handle.
-
Enable interrupts for the IRQ you want to handle, using the set_interrupts() function. Note that the VBL interrupt is already enabled before the main() function is called. If you want to set the interrupts before main() is called, you must install an initialization routine.
+
Enable interrupts for the IRQ you want to handle, using the set_interrupts() function. Note that the VBL interrupt is already enabled before the main() function is called. If you want to set the interrupts before main() is called, you must install an initialization routine.
See the irq example project for additional details for a complete example.
-
+
Using your own Interrupt Dispatcher
If you want to use your own Interrupt Dispatcher instead of the GBDK chained dispatcher (for improved performance), then don't call the add_...() function for the respective interrupt and it's dispatcher won't be installed.
Exception: the VBL dispatcher will always be linked in at compile time.
For the SIO interrupt, also do not make any standard SIO calls to avoid having it's dispatcher installed.
By default when an Interrupt handler completes and is ready to exit it will check STAT_REG and only return at the BEGINNING of either LCD Mode 0 or Mode 1. This helps prevent graphical glitches caused when an ISR interrupts a graphics operation in one mode but returns in a different mode for which that graphics operation is not allowed.
What GBDK does automatically and behind the scenes
-
+
OAM (VRAM Sprite Attribute Table)
GBDK sets up a Shadow OAM which gets copied automatically to the hardware OAM by the default V-Blank ISR. The Shadow OAM allows updating sprites without worrying about whether it is safe to write to them or not based on the hardware LCD mode.
-
+
Font tiles when using stdio.h
Including stdio.h and using functions such as printf() will use a large number of the background tiles for font characters. If stdio.h is not included then that space will be available for use with other tiles instead.
-
+
Default Interrupt Service Handlers (ISRs)
V-Blank: A default V-Blank ISR is installed on startup which copies the Shadow OAM to the hardware OAM and increments the global sys_time variable once per frame.
Serial Link I/O: If any of the GBDK serial link functions are used such as send_byte() and receive_byte(), the default SIO serial link handler will be installed automatically at compile-time.
-
+
Copying Functions to RAM and HIRAM
-
The ram_function example project included with GBDK demonstrates copying functions to RAM and HIRAM.
-
It is possible to copy functions to RAM and HIRAM (using the memcpy() and hiramcpy() functions), and execute them from C. The compiler automatically generates two symbols for the start and the end of each function, named start_X and end_X (where X is the name of the function). This enables to calculate the length of a function when copying it to RAM. Ensure you have enough free space in RAM or HIRAM for copying a function.
+
See the ram_function example project included with GBDK demonstrates copying functions to RAM and HIRAM.
+
Warning! Copying of functions is generally not safe since they may contain jumps to absolute addresses that will not be converted to match the new location.
+
It is possible to copy functions to RAM and HIRAM (using the memcpy() and hiramcpy() functions), and execute them from C. Ensure you have enough free space in RAM or HIRAM for copying a function.
There are basically two ways for calling a function located in RAM, HIRAM, or ROM:
Declare a pointer-to-function variable, and set it to the address of the function to call.
Declare the function as extern, and set its address at link time using the -Wl-gXXX=# flag (where XXX is the name of the function, and # is its address).
The second approach is slightly more efficient. Both approaches are demonstrated in the ram_function.c example.
-
+
Mixing C and Assembly
You can mix C and assembly (ASM) in two ways as described below. For additional detail see the links_sdcc_docs.
-
+
Inline ASM within C source files
Example:
__asm__("nop");
@@ -190,7 +192,7 @@ Inline ASM within C source files
(ASM code goes here)
__endasm;
}
-
This is from GBDK 2.x docs, verify it with GBDK-2020 and modern SDCC
It is possible to assemble and link files written in ASM alongside files written in C.
@@ -230,13 +232,13 @@ LD D,H
LD E,L
; There is no register to restore
RET ; Return result in DE
-
+
Including binary files in C source with incbin
Data from binary files can be included in C source files as a const array using the INCBIN() macro.
See the incbin example project for a demo of how to use it.
-
+
Known Issues and Limitations
-
+
SDCC
Const arrays declared with somevar[n] = {x} will NOT get initialized with value x. This may change when the SDCC RLE initializer is fixed. Use memset for now if you need it.
The results are in Emulator clock units, which are "1 nop in [CGB] doublespeed mode".
+
So when running in Normal Speed mode (i.e. non-CGB doublespeed) the printed result should be divided by 2 to get the actual ellapsed cycle count.
+
If running in CB Double Speed mode use the below call instead, it correctly compensates for the speed difference. In this scenario, the result does not need to be divided by 2 to get the ellapsed cycle count.
Print the string and arguments given by format to the emulator debug message window
+
Parameters
+
+
format
The format string as per printf
+
+
+
+
Does not return the number of characters printed. Result string MUST BE LESS OR EQUAL THAN 128 BYTES LONG, INCLUDING THE TRAILIG ZERO BYTE!
+
Currently supported:
+
%hx (char as hex)
+
%hu (unsigned char)
+
%hd (signed char)
+
%c (character)
+
%u (unsigned int)
+
%d (signed int)
+
%x (unsigned int as hex)
+
%s (string)
+
+
Warning: to correctly pass chars for printing as chars, they must be explicitly re-cast as such when calling the function. See docs_chars_varargs for more details.
How to use sprite property flags with metasprites:
Metsaprite structures can be copied into RAM so their property flags can be modified at runtime.
The metasprite structures can have the property flags modified before compilation (such as with -sp <props> in the png2asset tool).
-
Update properties for the affected sprites after calling a move_metasprite_*() function.
+
Update properties for the affected sprites after calling a move_metasprite_*() function.
+
+
The following functions are only available for Game Boy and related clone consoles due to lack of hardware support for sprite flipping in other consoles. See docs_consoles_supported_list
Up to 4 handlers may be added, with the last added being called last. If the remove_VBL function is to be called, only three may be added.
-
Do not use CRITICAL and INTERRUPT attributes for a function added via add_VBL() (or LCD, etc). The attributes are only required when constructing a bare jump from the interrupt vector itself.
+
Up to 4 handlers may be added, with the last added being called last. If the remove_VBL function is to be called, only three may be added.
+
Do not use CRITICAL and INTERRUPT attributes for a function added via add_VBL() (or LCD, etc). The attributes are only required when constructing a bare jump from the interrupt vector itself.
Note: The default VBL is installed automatically.
Adds a V-blank interrupt handler.
@@ -2184,8 +2225,8 @@ Variables
Adds a LCD interrupt handler.
Called when the LCD interrupt occurs, which is normally when LY_REG == LYC_REG.
-
From pan/k0Pa: There are various reasons for this interrupt to occur as described by the STAT_REG register ($FF41). One very popular reason is to indicate to the user when the video hardware is about to redraw a given LCD line. This can be useful for dynamically controlling the SCX_REG / SCY_REG registers ($FF43/$FF42) to perform special video effects.
There are various reasons for this interrupt to occur as described by the STAT_REG register ($FF41). One very popular reason is to indicate to the user when the video hardware is about to redraw a given LCD line. This can be useful for dynamically controlling the SCX_REG / SCY_REG registers ($FF43/$FF42) to perform special video effects.
From pan/k0Pa: This interrupt occurs on a transition of any of the keypad input lines from high to low. Due to the fact that keypad "bounce" is virtually always present, software should expect this interrupt to occur one or more times for every button press and one or more times for every button release.
This interrupt occurs on a transition of any of the keypad input lines from high to low. Due to the fact that keypad "bounce" is virtually always present, software should expect this interrupt to occur one or more times for every button press and one or more times for every button release.
Interrupt handler chain terminator that does not wait for .STAT
You must add this handler last in every interrupt handler chain if you want to change the default interrupt handler behaviour that waits for LCD controller mode to become 1 or 0 before return from the interrupt.
Sets a rectangular region of Background Tile Map. The offset value in base_tile is added to the tile ID for each map entry.
+
Parameters
+
+
x
X Start position in Background Map tile coordinates. Range 0 - 31
+
y
Y Start position in Background Map tile coordinates. Range 0 - 31
+
w
Width of area to set in tiles. Range 1 - 32
+
h
Height of area to set in tiles. Range 1 - 32
+
tiles
Pointer to source tile map data
+
base_tile
Offset each tile ID entry of the source map by this value. Range 1 - 255
+
+
+
+
This is identical to set_bkg_tiles() except that it adds the base_tile parameter for when a tile map's tiles don't start at index zero. (For example, the tiles used by the map range from 100 -> 120 in VRAM instead of 0 -> 20).
Entries are copied from map to the Background Tile Map starting at x, y writing across for w tiles and down for h tiles, using map_w as the rowstride for the source tile map.
-
Use this instead of set_bkg_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
Use this instead of set_bkg_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
One byte per source tile map entry.
Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
Sets a rectangular area of the Background Tile Map using a sub-region from a source tile map. The offset value in base_tile is added to the tile ID for each map entry.
+
Parameters
+
+
x
X Start position in Background Map tile coordinates. Range 0 - 31
+
y
Y Start position in Background Map tile coordinates. Range 0 - 31
+
w
Width of area to set in tiles. Range 1 - 255
+
h
Height of area to set in tiles. Range 1 - 255
+
map
Pointer to source tile map data
+
map_w
Width of source tile map in tiles. Range 1 - 255
+
base_tile
Offset each tile ID entry of the source map by this value. Range 1 - 255
+
+
+
+
This is identical to set_bkg_based_submap() except that it adds the base_tile parameter for when a tile map's tiles don't start at index zero. (For example, the tiles used by the map range from 100 -> 120 in VRAM instead of 0 -> 20).
Sets a rectangular region of the Window Tile Map. The offset value in base_tile is added to the tile ID for each map entry.
+
Parameters
+
+
x
X Start position in Window Map tile coordinates. Range 0 - 31
+
y
Y Start position in Window Map tile coordinates. Range 0 - 31
+
w
Width of area to set in tiles. Range 1 - 32
+
h
Height of area to set in tiles. Range 1 - 32
+
tiles
Pointer to source tile map data
+
base_tile
Offset each tile ID entry of the source map by this value. Range 1 - 255
+
+
+
+
This is identical to set_win_tiles() except that it adds the base_tile parameter for when a tile map's tiles don't start at index zero. (For example, the tiles used by the map range from 100 -> 120 in VRAM instead of 0 -> 20).
Entries are copied from map to the Window Tile Map starting at x, y writing across for w tiles and down for h tiles, using map_w as the rowstride for the source tile map.
-
Use this instead of set_win_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
Use this instead of set_win_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
One byte per source tile map entry.
Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
GBC only: VBK_REG determines whether Tile Numbers or Tile Attributes get set.
Sets a rectangular area of the Window Tile Map using a sub-region from a source tile map. The offset value in base_tile is added to the tile ID for each map entry.
+
Parameters
+
+
x
X Start position in Window Map tile coordinates. Range 0 - 31
+
y
Y Start position in Wimdpw Map tile coordinates. Range 0 - 31
+
w
Width of area to set in tiles. Range 1 - 255
+
h
Height of area to set in tiles. Range 1 - 255
+
map
Pointer to source tile map data
+
map_w
Width of source tile map in tiles. Range 1 - 255
+
base_tile
Offset each tile ID entry of the source map by this value. Range 1 - 255
+
+
+
+
This is identical to set_win_submap() except that it adds the base_tile parameter for when a tile map's tiles don't start at index zero. (For example, the tiles used by the map range from 100 -> 120 in VRAM instead of 0 -> 20).
Welcome to GBDK-2020! The best thing to do is head over to the Getting Started section to get up and running.
-
+
About the Documentation
This documentation is partially based on material written by the original GBDK authors in 1999 and updated for GBDK-2020. The API docs are automatically generated from the C header files using Doxygen.
GBDK-2020 is an updated version of the original GBDK with a modernized SDCC toolchain and many API improvements and fixes. It can be found at: https://github.com/gbdk-2020/gbdk-2020/.
The GameBoy Developer's Kit (GBDK, GBDK-2020) is used to develop games and programs for the Nintendo Game Boy (and some other consoles) in C and assembly. GBDK includes a set of libraries for the most common requirements and generates image files for use with a real GameBoy or emulators.
GBDK features:
C and ASM toolchain based on SDCC with some support utilities
A set of libraries with source code
Example programs in ASM and in C
-
Support for multiple ROM bank images
-
Support for multiple consoles: Game Boy, Analogue Pocket, Master System and Game Gear
+
Support for multiple ROM bank images and auto-banking
+
Support for multiple consoles: Game Boy, Analogue Pocket, Mega Duck, Master System and Game Gear
GBDK is freeware. Most of the tooling code is under the GPL. The runtime libraries should be under the LGPL. Please consider mentioning GBDK in the credits of projects made with it.
-
+
Historical Info and Links
Work on the original GBDK (pre-2020) was by:
Pascal Felber, Lars Malmborg, Michael Hope, David Galloway (djmips), and others.
The seed should be different each time, otherwise the same pseudo-random sequence will be generated.
The DIV Register (DIV_REG) is sometimes used as a seed, particularly if read at some variable point in time (such as when the player presses a button).
-
Only needs to be called once to initialize, buy may be called again to re-initialize with the same or a different seed.
Entries are copied from map to the Background Tile Map starting at x, y writing across for w tiles and down for h tiles, using map_w as the rowstride for the source tile map.
-
Use this instead of set_bkg_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
Use this instead of set_bkg_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
One byte per source tile map entry.
Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
Entries are copied from map to the Window Tile Map starting at x, y writing across for w tiles and down for h tiles, using map_w as the rowstride for the source tile map.
-
Use this instead of set_win_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
Use this instead of set_win_tiles when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
One byte per source tile map entry.
Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
GBC only: VBK_REG determines whether Tile Numbers or Tile Attributes get set.
diff --git a/docs/latex/01__getting__started_8md.tex b/docs/latex/01__getting__started_8md.tex
new file mode 100644
index 00000000..df33293a
--- /dev/null
+++ b/docs/latex/01__getting__started_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{01__getting__started_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/01\+\_\+getting\+\_\+started.md File Reference}
+\label{01__getting__started_8md}\index{c:/gb/gbdk-\/2020/docs/pages/01\_getting\_started.md@{c:/gb/gbdk-\/2020/docs/pages/01\_getting\_started.md}}
diff --git a/docs/latex/02__links__and__tools_8md.tex b/docs/latex/02__links__and__tools_8md.tex
new file mode 100644
index 00000000..6b678cd5
--- /dev/null
+++ b/docs/latex/02__links__and__tools_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{02__links__and__tools_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/02\+\_\+links\+\_\+and\+\_\+tools.md File Reference}
+\label{02__links__and__tools_8md}\index{c:/gb/gbdk-\/2020/docs/pages/02\_links\_and\_tools.md@{c:/gb/gbdk-\/2020/docs/pages/02\_links\_and\_tools.md}}
diff --git a/docs/latex/03__using__gbdk_8md.tex b/docs/latex/03__using__gbdk_8md.tex
new file mode 100644
index 00000000..8ec02d23
--- /dev/null
+++ b/docs/latex/03__using__gbdk_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{03__using__gbdk_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/03\+\_\+using\+\_\+gbdk.md File Reference}
+\label{03__using__gbdk_8md}\index{c:/gb/gbdk-\/2020/docs/pages/03\_using\_gbdk.md@{c:/gb/gbdk-\/2020/docs/pages/03\_using\_gbdk.md}}
diff --git a/docs/latex/04__coding__guidelines_8md.tex b/docs/latex/04__coding__guidelines_8md.tex
new file mode 100644
index 00000000..daed31a0
--- /dev/null
+++ b/docs/latex/04__coding__guidelines_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{04__coding__guidelines_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/04\+\_\+coding\+\_\+guidelines.md File Reference}
+\label{04__coding__guidelines_8md}\index{c:/gb/gbdk-\/2020/docs/pages/04\_coding\_guidelines.md@{c:/gb/gbdk-\/2020/docs/pages/04\_coding\_guidelines.md}}
diff --git a/docs/latex/05__banking__mbcs_8md.tex b/docs/latex/05__banking__mbcs_8md.tex
new file mode 100644
index 00000000..f5981469
--- /dev/null
+++ b/docs/latex/05__banking__mbcs_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{05__banking__mbcs_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/05\+\_\+banking\+\_\+mbcs.md File Reference}
+\label{05__banking__mbcs_8md}\index{c:/gb/gbdk-\/2020/docs/pages/05\_banking\_mbcs.md@{c:/gb/gbdk-\/2020/docs/pages/05\_banking\_mbcs.md}}
diff --git a/docs/latex/06__toolchain_8md.tex b/docs/latex/06__toolchain_8md.tex
new file mode 100644
index 00000000..4b9dc22b
--- /dev/null
+++ b/docs/latex/06__toolchain_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{06__toolchain_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/06\+\_\+toolchain.md File Reference}
+\label{06__toolchain_8md}\index{c:/gb/gbdk-\/2020/docs/pages/06\_toolchain.md@{c:/gb/gbdk-\/2020/docs/pages/06\_toolchain.md}}
diff --git a/docs/latex/06b__supported__consoles_8md.tex b/docs/latex/06b__supported__consoles_8md.tex
new file mode 100644
index 00000000..a98edb88
--- /dev/null
+++ b/docs/latex/06b__supported__consoles_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{06b__supported__consoles_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/06b\+\_\+supported\+\_\+consoles.md File Reference}
+\label{06b__supported__consoles_8md}\index{c:/gb/gbdk-\/2020/docs/pages/06b\_supported\_consoles.md@{c:/gb/gbdk-\/2020/docs/pages/06b\_supported\_consoles.md}}
diff --git a/docs/latex/07__sample__programs_8md.tex b/docs/latex/07__sample__programs_8md.tex
new file mode 100644
index 00000000..6305511a
--- /dev/null
+++ b/docs/latex/07__sample__programs_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{07__sample__programs_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/07\+\_\+sample\+\_\+programs.md File Reference}
+\label{07__sample__programs_8md}\index{c:/gb/gbdk-\/2020/docs/pages/07\_sample\_programs.md@{c:/gb/gbdk-\/2020/docs/pages/07\_sample\_programs.md}}
diff --git a/docs/latex/08__faq_8md.tex b/docs/latex/08__faq_8md.tex
new file mode 100644
index 00000000..8d93c031
--- /dev/null
+++ b/docs/latex/08__faq_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{08__faq_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/08\+\_\+faq.md File Reference}
+\label{08__faq_8md}\index{c:/gb/gbdk-\/2020/docs/pages/08\_faq.md@{c:/gb/gbdk-\/2020/docs/pages/08\_faq.md}}
diff --git a/docs/latex/09__migrating__new__versions_8md.tex b/docs/latex/09__migrating__new__versions_8md.tex
new file mode 100644
index 00000000..eb3e7cb5
--- /dev/null
+++ b/docs/latex/09__migrating__new__versions_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{09__migrating__new__versions_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/09\+\_\+migrating\+\_\+new\+\_\+versions.md File Reference}
+\label{09__migrating__new__versions_8md}\index{c:/gb/gbdk-\/2020/docs/pages/09\_migrating\_new\_versions.md@{c:/gb/gbdk-\/2020/docs/pages/09\_migrating\_new\_versions.md}}
diff --git a/docs/latex/10__release__notes_8md.tex b/docs/latex/10__release__notes_8md.tex
new file mode 100644
index 00000000..b0d6fed9
--- /dev/null
+++ b/docs/latex/10__release__notes_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{10__release__notes_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/10\+\_\+release\+\_\+notes.md File Reference}
+\label{10__release__notes_8md}\index{c:/gb/gbdk-\/2020/docs/pages/10\_release\_notes.md@{c:/gb/gbdk-\/2020/docs/pages/10\_release\_notes.md}}
diff --git a/docs/latex/20__toolchain__settings_8md.tex b/docs/latex/20__toolchain__settings_8md.tex
new file mode 100644
index 00000000..3cc96771
--- /dev/null
+++ b/docs/latex/20__toolchain__settings_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{20__toolchain__settings_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/20\+\_\+toolchain\+\_\+settings.md File Reference}
+\label{20__toolchain__settings_8md}\index{c:/gb/gbdk-\/2020/docs/pages/20\_toolchain\_settings.md@{c:/gb/gbdk-\/2020/docs/pages/20\_toolchain\_settings.md}}
diff --git a/docs/latex/Makefile b/docs/latex/Makefile
new file mode 100644
index 00000000..877c9ccc
--- /dev/null
+++ b/docs/latex/Makefile
@@ -0,0 +1,23 @@
+LATEX_CMD=pdflatex
+
+all: refman.pdf
+
+pdf: refman.pdf
+
+refman.pdf: clean refman.tex
+ $(LATEX_CMD) refman
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+ latex_count=8 ; \
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
+ do \
+ echo "Rerunning latex...." ;\
+ $(LATEX_CMD) refman ;\
+ latex_count=`expr $$latex_count - 1` ;\
+ done
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+
+
+clean:
+ rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
diff --git a/docs/latex/annotated.tex b/docs/latex/annotated.tex
new file mode 100644
index 00000000..6b7fe03b
--- /dev/null
+++ b/docs/latex/annotated.tex
@@ -0,0 +1,12 @@
+\doxysubsection{Data Structures}
+Here are the data structures with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} }{\pageref{union____far__ptr}}{}
+\item\contentsline{section}{\mbox{\hyperlink{union__fixed}{\+\_\+fixed}} }{\pageref{union__fixed}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}} }{\pageref{structatomic__flag}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}} }{\pageref{structisr__nested__vector__t}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}} }{\pageref{structisr__vector__t}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} }{\pageref{structjoypads__t}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} }{\pageref{structmetasprite__t}}{}
+\item\contentsline{section}{\mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}} }{\pageref{struct_o_a_m__item__t}}{}
+\item\contentsline{section}{\mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}} }{\pageref{structsfont__handle}}{}
+\end{DoxyCompactList}
diff --git a/docs/latex/asm_2gbz80_2stdarg_8h.tex b/docs/latex/asm_2gbz80_2stdarg_8h.tex
new file mode 100644
index 00000000..79ee0e4c
--- /dev/null
+++ b/docs/latex/asm_2gbz80_2stdarg_8h.tex
@@ -0,0 +1,46 @@
+\hypertarget{asm_2gbz80_2stdarg_8h}{}\doxysubsection{asm/gbz80/stdarg.h File Reference}
+\label{asm_2gbz80_2stdarg_8h}\index{asm/gbz80/stdarg.h@{asm/gbz80/stdarg.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}{va\+\_\+start}}(list, last)~list = (unsigned char $\ast$)\&last + sizeof(last)
+\item
+\#define \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}{va\+\_\+arg}}(list, type)~$\ast$((type $\ast$)((list += sizeof(type)) -\/ sizeof(type)))
+\item
+\#define \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}{va\+\_\+end}}(list)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef unsigned char $\ast$ \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}{va\+\_\+list}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}\label{asm_2gbz80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}}
+\index{stdarg.h@{stdarg.h}!va\_start@{va\_start}}
+\index{va\_start@{va\_start}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_start}{va\_start}}
+{\footnotesize\ttfamily \#define va\+\_\+start(\begin{DoxyParamCaption}\item[{}]{list, }\item[{}]{last }\end{DoxyParamCaption})~list = (unsigned char $\ast$)\&last + sizeof(last)}
+
+\mbox{\Hypertarget{asm_2gbz80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}\label{asm_2gbz80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}}
+\index{stdarg.h@{stdarg.h}!va\_arg@{va\_arg}}
+\index{va\_arg@{va\_arg}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_arg}{va\_arg}}
+{\footnotesize\ttfamily \#define va\+\_\+arg(\begin{DoxyParamCaption}\item[{}]{list, }\item[{}]{type }\end{DoxyParamCaption})~$\ast$((type $\ast$)((list += sizeof(type)) -\/ sizeof(type)))}
+
+\mbox{\Hypertarget{asm_2gbz80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}\label{asm_2gbz80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}}
+\index{stdarg.h@{stdarg.h}!va\_end@{va\_end}}
+\index{va\_end@{va\_end}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_end}{va\_end}}
+{\footnotesize\ttfamily \#define va\+\_\+end(\begin{DoxyParamCaption}\item[{}]{list }\end{DoxyParamCaption})}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}\label{asm_2gbz80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}}
+\index{stdarg.h@{stdarg.h}!va\_list@{va\_list}}
+\index{va\_list@{va\_list}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_list}{va\_list}}
+{\footnotesize\ttfamily typedef unsigned char$\ast$ \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}{va\+\_\+list}}}
+
diff --git a/docs/latex/asm_2gbz80_2string_8h.tex b/docs/latex/asm_2gbz80_2string_8h.tex
new file mode 100644
index 00000000..663396b7
--- /dev/null
+++ b/docs/latex/asm_2gbz80_2string_8h.tex
@@ -0,0 +1,260 @@
+\hypertarget{asm_2gbz80_2string_8h}{}\doxysubsection{asm/gbz80/string.h File Reference}
+\label{asm_2gbz80_2string_8h}\index{asm/gbz80/string.h@{asm/gbz80/string.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_ada128b5ed545214bb397d1399615ec9e}{strcpy}} (char $\ast$dest, const char $\ast$src) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+int \mbox{\hyperlink{asm_2gbz80_2string_8h_a7172770a053aa1fe0ab46a97ab43a5fa}{strcmp}} (const char $\ast$s1, const char $\ast$s2) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a6a1a6cbe7fb6102819098340a4986574}{memcpy}} (void $\ast$dest, const void $\ast$src, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a802c986820d3866639922b6bc9484f90}{memmove}} (void $\ast$dest, const void $\ast$src, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} n)
+\item
+void $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a4bc4146b1a053fc4ec10f1377bb21a4f}{memset}} (void $\ast$s, int \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} n) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a476b2b37367c65c6cb36037bfc16b19f}{reverse}} (char $\ast$s) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a8908188ae9fc2f05d993257ef001d553}{strcat}} (char $\ast$s1, const char $\ast$s2)
+\item
+int \mbox{\hyperlink{asm_2gbz80_2string_8h_a5e4982e9d2fd4ec328abfda6b1a3f7e5}{strlen}} (const char $\ast$s) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_af70714f788819be9dbf368a969be23f7}{strncat}} (char $\ast$s1, const char $\ast$s2, int n)
+\item
+int \mbox{\hyperlink{asm_2gbz80_2string_8h_ab745ed93c0024648f33dc1d553e9fdcc}{strncmp}} (const char $\ast$s1, const char $\ast$s2, int n)
+\item
+char $\ast$ \mbox{\hyperlink{asm_2gbz80_2string_8h_a21ae87d60fcc456369668093c57db61f}{strncpy}} (char $\ast$s1, const char $\ast$s2, int n)
+\item
+int \mbox{\hyperlink{asm_2gbz80_2string_8h_a52701f453c97403ec1b12d286484259b}{memcmp}} (const void $\ast$buf1, const void $\ast$buf2, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} count) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+char \mbox{\hyperlink{asm_2gbz80_2string_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Generic string functions.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_ada128b5ed545214bb397d1399615ec9e}\label{asm_2gbz80_2string_8h_ada128b5ed545214bb397d1399615ec9e}}
+\index{string.h@{string.h}!strcpy@{strcpy}}
+\index{strcpy@{strcpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcpy()}{strcpy()}}
+{\footnotesize\ttfamily char$\ast$ strcpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest, }\item[{const char $\ast$}]{src }\end{DoxyParamCaption})}
+
+Copies the string pointed to by {\bfseries{src}} (including the terminating `\textbackslash{}0' character) to the array pointed to by {\bfseries{dest}}.
+
+The strings may not overlap, and the destination string dest must be large enough to receive the copy.
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Array to copy into \\
+\hline
+{\em src} & Array to copy from\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A pointer to dest
+\end{DoxyReturn}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a7172770a053aa1fe0ab46a97ab43a5fa}\label{asm_2gbz80_2string_8h_a7172770a053aa1fe0ab46a97ab43a5fa}}
+\index{string.h@{string.h}!strcmp@{strcmp}}
+\index{strcmp@{strcmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcmp()}{strcmp()}}
+{\footnotesize\ttfamily int strcmp (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1, }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}
+
+Compares strings
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & First string to compare \\
+\hline
+{\em s2} & Second string to compare\\
+\hline
+\end{DoxyParams}
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{s1}} $>$ {\bfseries{s2}} \item 0 if {\bfseries{s1}} == {\bfseries{s2}} \item $<$ 0 if {\bfseries{s1}} $<$ {\bfseries{s2}} \end{DoxyItemize}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a6a1a6cbe7fb6102819098340a4986574}\label{asm_2gbz80_2string_8h_a6a1a6cbe7fb6102819098340a4986574}}
+\index{string.h@{string.h}!memcpy@{memcpy}}
+\index{memcpy@{memcpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memcpy()}{memcpy()}}
+{\footnotesize\ttfamily void$\ast$ memcpy (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Copies n bytes from memory area src to memory area dest.
+
+The memory areas may not overlap.
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Buffer to copy into \\
+\hline
+{\em src} & Buffer to copy from \\
+\hline
+{\em len} & Number of Bytes to copy \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a802c986820d3866639922b6bc9484f90}\label{asm_2gbz80_2string_8h_a802c986820d3866639922b6bc9484f90}}
+\index{string.h@{string.h}!memmove@{memmove}}
+\index{memmove@{memmove}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memmove()}{memmove()}}
+{\footnotesize\ttfamily void$\ast$ memmove (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Copies n bytes from memory area src to memory area dest, areas may overlap \mbox{\Hypertarget{asm_2gbz80_2string_8h_a4bc4146b1a053fc4ec10f1377bb21a4f}\label{asm_2gbz80_2string_8h_a4bc4146b1a053fc4ec10f1377bb21a4f}}
+\index{string.h@{string.h}!memset@{memset}}
+\index{memset@{memset}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memset()}{memset()}}
+{\footnotesize\ttfamily void$\ast$ memset (\begin{DoxyParamCaption}\item[{void $\ast$}]{s, }\item[{int}]{c, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Fills the memory region {\bfseries{s}} with {\bfseries{n}} bytes using value {\bfseries{c}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Buffer to fill \\
+\hline
+{\em c} & char value to fill with (truncated from int) \\
+\hline
+{\em n} & Number of bytes to fill \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a476b2b37367c65c6cb36037bfc16b19f}\label{asm_2gbz80_2string_8h_a476b2b37367c65c6cb36037bfc16b19f}}
+\index{string.h@{string.h}!reverse@{reverse}}
+\index{reverse@{reverse}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{reverse()}{reverse()}}
+{\footnotesize\ttfamily char$\ast$ reverse (\begin{DoxyParamCaption}\item[{char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Reverses the characters in a string
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Pointer to string to reverse.\\
+\hline
+\end{DoxyParams}
+For example \textquotesingle{}abcdefg\textquotesingle{} will become \textquotesingle{}gfedcba\textquotesingle{}.
+
+Banked as the string must be modifiable.
+
+Returns\+: Pointer to {\bfseries{s}} \mbox{\Hypertarget{asm_2gbz80_2string_8h_a8908188ae9fc2f05d993257ef001d553}\label{asm_2gbz80_2string_8h_a8908188ae9fc2f05d993257ef001d553}}
+\index{string.h@{string.h}!strcat@{strcat}}
+\index{strcat@{strcat}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcat()}{strcat()}}
+{\footnotesize\ttfamily char$\ast$ strcat (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}
+
+Concatenate Strings. Appends string {\bfseries{s2}} to the end of string {\bfseries{s1}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to append onto \\
+\hline
+{\em s2} & String to copy from\\
+\hline
+\end{DoxyParams}
+For example \textquotesingle{}abc\textquotesingle{} and \textquotesingle{}def\textquotesingle{} will become \textquotesingle{}abcdef\textquotesingle{}.
+
+String {\bfseries{s1}} must be large enough to store both {\bfseries{s1}} and {\bfseries{s2}}.
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2gbz80_2string_8h_a5e4982e9d2fd4ec328abfda6b1a3f7e5}\label{asm_2gbz80_2string_8h_a5e4982e9d2fd4ec328abfda6b1a3f7e5}}
+\index{string.h@{string.h}!strlen@{strlen}}
+\index{strlen@{strlen}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strlen()}{strlen()}}
+{\footnotesize\ttfamily int strlen (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Calculates the length of a string
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to calculate length of\\
+\hline
+\end{DoxyParams}
+Returns\+: Length of string not including the terminating `\textbackslash{}0' character. \mbox{\Hypertarget{asm_2gbz80_2string_8h_af70714f788819be9dbf368a969be23f7}\label{asm_2gbz80_2string_8h_af70714f788819be9dbf368a969be23f7}}
+\index{string.h@{string.h}!strncat@{strncat}}
+\index{strncat@{strncat}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncat()}{strncat()}}
+{\footnotesize\ttfamily char$\ast$ strncat (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Concatenate at most {\bfseries{n}} characters from string {\bfseries{s2}} onto the end of {\bfseries{s1}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to append onto \\
+\hline
+{\em s2} & String to copy from \\
+\hline
+{\em n} & Max number of characters to copy from {\bfseries{s2}}\\
+\hline
+\end{DoxyParams}
+String {\bfseries{s1}} must be large enough to store both {\bfseries{s1}} and {\bfseries{n}} characters of {\bfseries{s2}}
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2gbz80_2string_8h_ab745ed93c0024648f33dc1d553e9fdcc}\label{asm_2gbz80_2string_8h_ab745ed93c0024648f33dc1d553e9fdcc}}
+\index{string.h@{string.h}!strncmp@{strncmp}}
+\index{strncmp@{strncmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncmp()}{strncmp()}}
+{\footnotesize\ttfamily int strncmp (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Compare strings (at most {\bfseries{n}} characters)\+:
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & First string to compare \\
+\hline
+{\em s2} & Second string to compare \\
+\hline
+{\em n} & Max number of characters to compare\\
+\hline
+\end{DoxyParams}
+Returns zero if the strings are identical, or non-\/zero if they are not (see below).
+
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{s1}} $>$ {\bfseries{s2}} (at first non-\/matching byte) \item 0 if {\bfseries{s1}} == {\bfseries{s2}} \item $<$ 0 if {\bfseries{s1}} $<$ {\bfseries{s2}} (at first non-\/matching byte) \end{DoxyItemize}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a21ae87d60fcc456369668093c57db61f}\label{asm_2gbz80_2string_8h_a21ae87d60fcc456369668093c57db61f}}
+\index{string.h@{string.h}!strncpy@{strncpy}}
+\index{strncpy@{strncpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncpy()}{strncpy()}}
+{\footnotesize\ttfamily char$\ast$ strncpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Copy {\bfseries{n}} characters from string {\bfseries{s2}} to {\bfseries{s1}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to copy into \\
+\hline
+{\em s2} & String to copy from \\
+\hline
+{\em n} & Max number of characters to copy from {\bfseries{s2}}\\
+\hline
+\end{DoxyParams}
+If {\bfseries{s2}} is shorter than {\bfseries{n}}, the remaining bytes in {\bfseries{s1}} are filled with \textbackslash{}0.
+
+Warning\+: If there is no \textbackslash{}0 in the first {\bfseries{n}} bytes of {\bfseries{s2}} then {\bfseries{s1}} will not be null terminated.
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2gbz80_2string_8h_a52701f453c97403ec1b12d286484259b}\label{asm_2gbz80_2string_8h_a52701f453c97403ec1b12d286484259b}}
+\index{string.h@{string.h}!memcmp@{memcmp}}
+\index{memcmp@{memcmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memcmp()}{memcmp()}}
+{\footnotesize\ttfamily int memcmp (\begin{DoxyParamCaption}\item[{const void $\ast$}]{buf1, }\item[{const void $\ast$}]{buf2, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{count }\end{DoxyParamCaption})}
+
+Compare up to {\bfseries{count}} bytes in buffers {\bfseries{buf1}} and {\bfseries{buf2}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em buf1} & Pointer to First buffer to compare \\
+\hline
+{\em buf2} & Pointer to Second buffer to compare \\
+\hline
+{\em count} & Max number of bytes to compare\\
+\hline
+\end{DoxyParams}
+Returns zero if the buffers are identical, or non-\/zero if they are not (see below).
+
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{buf1}} $>$ {\bfseries{buf2}} (at first non-\/matching byte) \item 0 if {\bfseries{buf1}} == {\bfseries{buf2}} \item $<$ 0 if {\bfseries{buf1}} $<$ {\bfseries{buf2}} (at first non-\/matching byte) \end{DoxyItemize}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2string_8h_a0b3366755f3276b0243c1e0497471b7a}\label{asm_2gbz80_2string_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{string.h@{string.h}!c@{c}}
+\index{c@{c}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
diff --git a/docs/latex/asm_2gbz80_2types_8h.tex b/docs/latex/asm_2gbz80_2types_8h.tex
new file mode 100644
index 00000000..1303da87
--- /dev/null
+++ b/docs/latex/asm_2gbz80_2types_8h.tex
@@ -0,0 +1,98 @@
+\hypertarget{asm_2gbz80_2types_8h}{}\doxysubsection{asm/gbz80/types.h File Reference}
+\label{asm_2gbz80_2types_8h}\index{asm/gbz80/types.h@{asm/gbz80/types.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{asm_2gbz80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}{\+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef signed char \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}}
+\item
+typedef unsigned char \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}
+\item
+typedef signed int \mbox{\hyperlink{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}}
+\item
+typedef signed long \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}}
+\item
+typedef unsigned long \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+\label{asm_2gbz80_2types_8h_file_asm_gbz80_types_h}%
+\Hypertarget{asm_2gbz80_2types_8h_file_asm_gbz80_types_h}%
+Types definitions for the gb.
+
+\label{asm_2gbz80_2types_8h_file_asm_z80_types_h}%
+\Hypertarget{asm_2gbz80_2types_8h_file_asm_z80_types_h}%
+Types definitions for the gb.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}\label{asm_2gbz80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}}
+\index{types.h@{types.h}!\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}}
+\index{\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{\_\_SIZE\_T\_DEFINED}{\_\_SIZE\_T\_DEFINED}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}\label{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}}
+\index{types.h@{types.h}!INT8@{INT8}}
+\index{INT8@{INT8}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT8}{INT8}}
+{\footnotesize\ttfamily typedef signed char \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}}}
+
+Signed eight bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}\label{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}}
+\index{types.h@{types.h}!UINT8@{UINT8}}
+\index{UINT8@{UINT8}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT8}{UINT8}}
+{\footnotesize\ttfamily typedef unsigned char \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}
+
+Unsigned eight bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}\label{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}}
+\index{types.h@{types.h}!INT16@{INT16}}
+\index{INT16@{INT16}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT16}{INT16}}
+{\footnotesize\ttfamily typedef signed int \mbox{\hyperlink{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}}}
+
+Signed sixteen bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}\label{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}}
+\index{types.h@{types.h}!UINT16@{UINT16}}
+\index{UINT16@{UINT16}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT16}{UINT16}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}}}
+
+Unsigned sixteen bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}\label{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}}
+\index{types.h@{types.h}!INT32@{INT32}}
+\index{INT32@{INT32}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT32}{INT32}}
+{\footnotesize\ttfamily typedef signed long \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}}}
+
+Signed 32 bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}\label{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}}
+\index{types.h@{types.h}!UINT32@{UINT32}}
+\index{UINT32@{UINT32}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT32}{UINT32}}
+{\footnotesize\ttfamily typedef unsigned long \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}}}
+
+Unsigned 32 bit. \mbox{\Hypertarget{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}\label{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}}
+\index{types.h@{types.h}!size\_t@{size\_t}}
+\index{size\_t@{size\_t}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{size\_t}{size\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}
+
+\mbox{\Hypertarget{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}\label{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}}
+\index{types.h@{types.h}!clock\_t@{clock\_t}}
+\index{clock\_t@{clock\_t}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{clock\_t}{clock\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}}}
+
+Returned from clock \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock}}
+\end{DoxySeeAlso}
diff --git a/docs/latex/asm_2types_8h.tex b/docs/latex/asm_2types_8h.tex
new file mode 100644
index 00000000..46fdd3f6
--- /dev/null
+++ b/docs/latex/asm_2types_8h.tex
@@ -0,0 +1,182 @@
+\hypertarget{asm_2types_8h}{}\doxysubsection{asm/types.h File Reference}
+\label{asm_2types_8h}\index{asm/types.h@{asm/types.h}}
+{\ttfamily \#include $<$asm/gbz80/types.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+union \mbox{\hyperlink{union__fixed}{\+\_\+fixed}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(...)
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_a7a18c4884994b9b520ae535b6d9579d3}{N\+A\+K\+ED}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_afb3731986211fded0a874086c98ffcc4}{S\+FR}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{AT}}(A)
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_aa8480aed89a168ec484727f5ac985cd0}{B\+A\+N\+K\+ED}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}}
+\item
+\#define \mbox{\hyperlink{asm_2types_8h_ac950c0db046e2f86d15e7ae1f558b017}{I\+N\+T\+E\+R\+R\+U\+PT}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a5e2fb030036b42012a298e24aca66071}{B\+O\+O\+L\+E\+AN}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a0059ccf0a32e1f146ef70ce970908bf6}{B\+Y\+TE}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}} \mbox{\hyperlink{asm_2types_8h_ac1b71367b1b0eae6718d17b4fd07aecd}{W\+O\+RD}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}} \mbox{\hyperlink{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}{U\+W\+O\+RD}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a6c3850eca7373a470eb6e5a7c6278215}{L\+W\+O\+RD}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a91374712e986ede0145415318d88fbd8}{U\+L\+W\+O\+RD}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_ad4ab93994d05960e2f96e83b4c45c1cf}{D\+W\+O\+RD}}
+\item
+typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a332730c89876a91d3c98a6c9a764e23e}{U\+D\+W\+O\+RD}}
+\item
+typedef union \mbox{\hyperlink{union__fixed}{\+\_\+fixed}} \mbox{\hyperlink{asm_2types_8h_ab61f8ff6a444351a91fc9a67c8e6145f}{fixed}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Shared types definitions.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}\label{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}}
+\index{types.h@{types.h}!OLDCALL@{OLDCALL}}
+\index{OLDCALL@{OLDCALL}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{OLDCALL}{OLDCALL}}
+{\footnotesize\ttfamily \#define O\+L\+D\+C\+A\+LL}
+
+\mbox{\Hypertarget{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}\label{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}}
+\index{types.h@{types.h}!PRESERVES\_REGS@{PRESERVES\_REGS}}
+\index{PRESERVES\_REGS@{PRESERVES\_REGS}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{PRESERVES\_REGS}{PRESERVES\_REGS}}
+{\footnotesize\ttfamily \#define P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS(\begin{DoxyParamCaption}\item[{}]{... }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{asm_2types_8h_a7a18c4884994b9b520ae535b6d9579d3}\label{asm_2types_8h_a7a18c4884994b9b520ae535b6d9579d3}}
+\index{types.h@{types.h}!NAKED@{NAKED}}
+\index{NAKED@{NAKED}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{NAKED}{NAKED}}
+{\footnotesize\ttfamily \#define N\+A\+K\+ED}
+
+\mbox{\Hypertarget{asm_2types_8h_afb3731986211fded0a874086c98ffcc4}\label{asm_2types_8h_afb3731986211fded0a874086c98ffcc4}}
+\index{types.h@{types.h}!SFR@{SFR}}
+\index{SFR@{SFR}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{SFR}{SFR}}
+{\footnotesize\ttfamily \#define S\+FR}
+
+\mbox{\Hypertarget{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}\label{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}}
+\index{types.h@{types.h}!AT@{AT}}
+\index{AT@{AT}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{AT}{AT}}
+{\footnotesize\ttfamily \#define AT(\begin{DoxyParamCaption}\item[{}]{A }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}\label{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}}
+\index{types.h@{types.h}!NONBANKED@{NONBANKED}}
+\index{NONBANKED@{NONBANKED}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{NONBANKED}{NONBANKED}}
+{\footnotesize\ttfamily \#define N\+O\+N\+B\+A\+N\+K\+ED}
+
+\mbox{\Hypertarget{asm_2types_8h_aa8480aed89a168ec484727f5ac985cd0}\label{asm_2types_8h_aa8480aed89a168ec484727f5ac985cd0}}
+\index{types.h@{types.h}!BANKED@{BANKED}}
+\index{BANKED@{BANKED}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{BANKED}{BANKED}}
+{\footnotesize\ttfamily \#define B\+A\+N\+K\+ED}
+
+\mbox{\Hypertarget{asm_2types_8h_ae0233515480e60d29bcc731469976e02}\label{asm_2types_8h_ae0233515480e60d29bcc731469976e02}}
+\index{types.h@{types.h}!CRITICAL@{CRITICAL}}
+\index{CRITICAL@{CRITICAL}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{CRITICAL}{CRITICAL}}
+{\footnotesize\ttfamily \#define C\+R\+I\+T\+I\+C\+AL}
+
+\mbox{\Hypertarget{asm_2types_8h_ac950c0db046e2f86d15e7ae1f558b017}\label{asm_2types_8h_ac950c0db046e2f86d15e7ae1f558b017}}
+\index{types.h@{types.h}!INTERRUPT@{INTERRUPT}}
+\index{INTERRUPT@{INTERRUPT}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INTERRUPT}{INTERRUPT}}
+{\footnotesize\ttfamily \#define I\+N\+T\+E\+R\+R\+U\+PT}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{asm_2types_8h_a5e2fb030036b42012a298e24aca66071}\label{asm_2types_8h_a5e2fb030036b42012a298e24aca66071}}
+\index{types.h@{types.h}!BOOLEAN@{BOOLEAN}}
+\index{BOOLEAN@{BOOLEAN}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{BOOLEAN}{BOOLEAN}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a5e2fb030036b42012a298e24aca66071}{B\+O\+O\+L\+E\+AN}}}
+
+T\+R\+UE or F\+A\+L\+SE. \label{asm_2types_8h_file_asm_types_h}%
+\Hypertarget{asm_2types_8h_file_asm_types_h}%
+\mbox{\Hypertarget{asm_2types_8h_a0059ccf0a32e1f146ef70ce970908bf6}\label{asm_2types_8h_a0059ccf0a32e1f146ef70ce970908bf6}}
+\index{types.h@{types.h}!BYTE@{BYTE}}
+\index{BYTE@{BYTE}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{BYTE}{BYTE}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a0059ccf0a32e1f146ef70ce970908bf6}{B\+Y\+TE}}}
+
+Signed 8 bit. \mbox{\Hypertarget{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}\label{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}}
+\index{types.h@{types.h}!UBYTE@{UBYTE}}
+\index{UBYTE@{UBYTE}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UBYTE}{UBYTE}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}}
+
+Unsigned 8 bit. \mbox{\Hypertarget{asm_2types_8h_ac1b71367b1b0eae6718d17b4fd07aecd}\label{asm_2types_8h_ac1b71367b1b0eae6718d17b4fd07aecd}}
+\index{types.h@{types.h}!WORD@{WORD}}
+\index{WORD@{WORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{WORD}{WORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}} \mbox{\hyperlink{asm_2types_8h_ac1b71367b1b0eae6718d17b4fd07aecd}{W\+O\+RD}}}
+
+Signed 16 bit \mbox{\Hypertarget{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}\label{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}}
+\index{types.h@{types.h}!UWORD@{UWORD}}
+\index{UWORD@{UWORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UWORD}{UWORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}} \mbox{\hyperlink{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}{U\+W\+O\+RD}}}
+
+Unsigned 16 bit \mbox{\Hypertarget{asm_2types_8h_a6c3850eca7373a470eb6e5a7c6278215}\label{asm_2types_8h_a6c3850eca7373a470eb6e5a7c6278215}}
+\index{types.h@{types.h}!LWORD@{LWORD}}
+\index{LWORD@{LWORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{LWORD}{LWORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a6c3850eca7373a470eb6e5a7c6278215}{L\+W\+O\+RD}}}
+
+Signed 32 bit \mbox{\Hypertarget{asm_2types_8h_a91374712e986ede0145415318d88fbd8}\label{asm_2types_8h_a91374712e986ede0145415318d88fbd8}}
+\index{types.h@{types.h}!ULWORD@{ULWORD}}
+\index{ULWORD@{ULWORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{ULWORD}{ULWORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a91374712e986ede0145415318d88fbd8}{U\+L\+W\+O\+RD}}}
+
+Unsigned 32 bit \mbox{\Hypertarget{asm_2types_8h_ad4ab93994d05960e2f96e83b4c45c1cf}\label{asm_2types_8h_ad4ab93994d05960e2f96e83b4c45c1cf}}
+\index{types.h@{types.h}!DWORD@{DWORD}}
+\index{DWORD@{DWORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{DWORD}{DWORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_ad4ab93994d05960e2f96e83b4c45c1cf}{D\+W\+O\+RD}}}
+
+Signed 32 bit \mbox{\Hypertarget{asm_2types_8h_a332730c89876a91d3c98a6c9a764e23e}\label{asm_2types_8h_a332730c89876a91d3c98a6c9a764e23e}}
+\index{types.h@{types.h}!UDWORD@{UDWORD}}
+\index{UDWORD@{UDWORD}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UDWORD}{UDWORD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}} \mbox{\hyperlink{asm_2types_8h_a332730c89876a91d3c98a6c9a764e23e}{U\+D\+W\+O\+RD}}}
+
+Unsigned 32 bit \mbox{\Hypertarget{asm_2types_8h_ab61f8ff6a444351a91fc9a67c8e6145f}\label{asm_2types_8h_ab61f8ff6a444351a91fc9a67c8e6145f}}
+\index{types.h@{types.h}!fixed@{fixed}}
+\index{fixed@{fixed}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{fixed}{fixed}}
+{\footnotesize\ttfamily typedef union \mbox{\hyperlink{union__fixed}{\+\_\+fixed}} \mbox{\hyperlink{asm_2types_8h_ab61f8ff6a444351a91fc9a67c8e6145f}{fixed}}}
+
+Useful definition for working with 8 bit + 8 bit fixed point values
+
+Use {\ttfamily .w} to access the variable as unsigned 16 bit type.
+
+Use {\ttfamily .b.\+h} and {\ttfamily .b.\+l} (or just {\ttfamily .h} and {\ttfamily .l}) to directly access it\textquotesingle{}s high and low unsigned 8 bit values.
\ No newline at end of file
diff --git a/docs/latex/asm_2z80_2stdarg_8h.tex b/docs/latex/asm_2z80_2stdarg_8h.tex
new file mode 100644
index 00000000..f159c48e
--- /dev/null
+++ b/docs/latex/asm_2z80_2stdarg_8h.tex
@@ -0,0 +1,46 @@
+\hypertarget{asm_2z80_2stdarg_8h}{}\doxysubsection{asm/z80/stdarg.h File Reference}
+\label{asm_2z80_2stdarg_8h}\index{asm/z80/stdarg.h@{asm/z80/stdarg.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{asm_2z80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}{va\+\_\+start}}(list, last)~list = (unsigned char $\ast$)\&last + sizeof(last)
+\item
+\#define \mbox{\hyperlink{asm_2z80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}{va\+\_\+arg}}(list, type)~$\ast$((type $\ast$)((list += sizeof(type)) -\/ sizeof(type)))
+\item
+\#define \mbox{\hyperlink{asm_2z80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}{va\+\_\+end}}(list)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef unsigned char $\ast$ \mbox{\hyperlink{asm_2z80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}{va\+\_\+list}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{asm_2z80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}\label{asm_2z80_2stdarg_8h_aa385efb7a67df5acc5e06cf3bdc8802f}}
+\index{stdarg.h@{stdarg.h}!va\_start@{va\_start}}
+\index{va\_start@{va\_start}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_start}{va\_start}}
+{\footnotesize\ttfamily \#define va\+\_\+start(\begin{DoxyParamCaption}\item[{}]{list, }\item[{}]{last }\end{DoxyParamCaption})~list = (unsigned char $\ast$)\&last + sizeof(last)}
+
+\mbox{\Hypertarget{asm_2z80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}\label{asm_2z80_2stdarg_8h_af4d89980b2bdeb5b37bbaa323d108bbc}}
+\index{stdarg.h@{stdarg.h}!va\_arg@{va\_arg}}
+\index{va\_arg@{va\_arg}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_arg}{va\_arg}}
+{\footnotesize\ttfamily \#define va\+\_\+arg(\begin{DoxyParamCaption}\item[{}]{list, }\item[{}]{type }\end{DoxyParamCaption})~$\ast$((type $\ast$)((list += sizeof(type)) -\/ sizeof(type)))}
+
+\mbox{\Hypertarget{asm_2z80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}\label{asm_2z80_2stdarg_8h_aa042dbf8cc345b3a522d6f706a78ddbd}}
+\index{stdarg.h@{stdarg.h}!va\_end@{va\_end}}
+\index{va\_end@{va\_end}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_end}{va\_end}}
+{\footnotesize\ttfamily \#define va\+\_\+end(\begin{DoxyParamCaption}\item[{}]{list }\end{DoxyParamCaption})}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{asm_2z80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}\label{asm_2z80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}}
+\index{stdarg.h@{stdarg.h}!va\_list@{va\_list}}
+\index{va\_list@{va\_list}!stdarg.h@{stdarg.h}}
+\doxyparagraph{\texorpdfstring{va\_list}{va\_list}}
+{\footnotesize\ttfamily typedef unsigned char$\ast$ \mbox{\hyperlink{asm_2gbz80_2stdarg_8h_a90f5a53cfeaf133c17cd213633060737}{va\+\_\+list}}}
+
diff --git a/docs/latex/asm_2z80_2string_8h.tex b/docs/latex/asm_2z80_2string_8h.tex
new file mode 100644
index 00000000..04d652fc
--- /dev/null
+++ b/docs/latex/asm_2z80_2string_8h.tex
@@ -0,0 +1,242 @@
+\hypertarget{asm_2z80_2string_8h}{}\doxysubsection{asm/z80/string.h File Reference}
+\label{asm_2z80_2string_8h}\index{asm/z80/string.h@{asm/z80/string.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_af5b1fe1ca3f2aca8ad215962460d15a6}{strcpy}} (char $\ast$dest, const char $\ast$src) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+int \mbox{\hyperlink{asm_2z80_2string_8h_a11bd144d7d44914099a3aeddf1c8567d}{strcmp}} (const char $\ast$s1, const char $\ast$s2)
+\item
+void $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_abec66c0a707472b9090ea4cd0402d648}{memcpy}} (void $\ast$dest, const void $\ast$src, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a854ba725a4e429439ccf93b1f5ad7b3a}{memmove}} (void $\ast$dest, const void $\ast$src, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} n) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a6491121b0087a8848354d9de3aa2444b}{memset}} (void $\ast$s, int \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} n) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a81863156a28fd2eefeee6859d768bdb1}{reverse}} (char $\ast$s) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a13c88f5a8475fd7de5d81553cb29724a}{strcat}} (char $\ast$s1, const char $\ast$s2) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+int \mbox{\hyperlink{asm_2z80_2string_8h_ac952c3ccec84a458a4d385c5273c1ca0}{strlen}} (const char $\ast$s) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a168580a0ddcb7fe754a711309966c99d}{strncat}} (char $\ast$s1, const char $\ast$s2, int n) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+int \mbox{\hyperlink{asm_2z80_2string_8h_a861dba2d93de82f087707bb795f5c602}{strncmp}} (const char $\ast$s1, const char $\ast$s2, int n) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+char $\ast$ \mbox{\hyperlink{asm_2z80_2string_8h_a796a9459c4f362e51c00307044c40ed5}{strncpy}} (char $\ast$s1, const char $\ast$s2, int n) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+int \mbox{\hyperlink{asm_2z80_2string_8h_add78645dba711c548ab16d056fb83b7e}{memcmp}} (const void $\ast$buf1, const void $\ast$buf2, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} count) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Generic string functions.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{asm_2z80_2string_8h_af5b1fe1ca3f2aca8ad215962460d15a6}\label{asm_2z80_2string_8h_af5b1fe1ca3f2aca8ad215962460d15a6}}
+\index{string.h@{string.h}!strcpy@{strcpy}}
+\index{strcpy@{strcpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcpy()}{strcpy()}}
+{\footnotesize\ttfamily char$\ast$ strcpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{dest, }\item[{const char $\ast$}]{src }\end{DoxyParamCaption})}
+
+Copies the string pointed to by {\bfseries{src}} (including the terminating `\textbackslash{}0' character) to the array pointed to by {\bfseries{dest}}.
+
+The strings may not overlap, and the destination string dest must be large enough to receive the copy.
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Array to copy into \\
+\hline
+{\em src} & Array to copy from\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A pointer to dest
+\end{DoxyReturn}
+\mbox{\Hypertarget{asm_2z80_2string_8h_a11bd144d7d44914099a3aeddf1c8567d}\label{asm_2z80_2string_8h_a11bd144d7d44914099a3aeddf1c8567d}}
+\index{string.h@{string.h}!strcmp@{strcmp}}
+\index{strcmp@{strcmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcmp()}{strcmp()}}
+{\footnotesize\ttfamily int strcmp (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1, }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}
+
+Compares strings
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & First string to compare \\
+\hline
+{\em s2} & Second string to compare\\
+\hline
+\end{DoxyParams}
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{s1}} $>$ {\bfseries{s2}} \item 0 if {\bfseries{s1}} == {\bfseries{s2}} \item $<$ 0 if {\bfseries{s1}} $<$ {\bfseries{s2}} \end{DoxyItemize}
+\mbox{\Hypertarget{asm_2z80_2string_8h_abec66c0a707472b9090ea4cd0402d648}\label{asm_2z80_2string_8h_abec66c0a707472b9090ea4cd0402d648}}
+\index{string.h@{string.h}!memcpy@{memcpy}}
+\index{memcpy@{memcpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memcpy()}{memcpy()}}
+{\footnotesize\ttfamily void$\ast$ memcpy (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Copies n bytes from memory area src to memory area dest.
+
+The memory areas may not overlap.
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Buffer to copy into \\
+\hline
+{\em src} & Buffer to copy from \\
+\hline
+{\em len} & Number of Bytes to copy \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{asm_2z80_2string_8h_a854ba725a4e429439ccf93b1f5ad7b3a}\label{asm_2z80_2string_8h_a854ba725a4e429439ccf93b1f5ad7b3a}}
+\index{string.h@{string.h}!memmove@{memmove}}
+\index{memmove@{memmove}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memmove()}{memmove()}}
+{\footnotesize\ttfamily void$\ast$ memmove (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Copies n bytes from memory area src to memory area dest, areas may overlap \mbox{\Hypertarget{asm_2z80_2string_8h_a6491121b0087a8848354d9de3aa2444b}\label{asm_2z80_2string_8h_a6491121b0087a8848354d9de3aa2444b}}
+\index{string.h@{string.h}!memset@{memset}}
+\index{memset@{memset}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memset()}{memset()}}
+{\footnotesize\ttfamily void$\ast$ memset (\begin{DoxyParamCaption}\item[{void $\ast$}]{s, }\item[{int}]{c, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Fills the memory region {\bfseries{s}} with {\bfseries{n}} bytes using value {\bfseries{c}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Buffer to fill \\
+\hline
+{\em c} & char value to fill with (truncated from int) \\
+\hline
+{\em n} & Number of bytes to fill \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{asm_2z80_2string_8h_a81863156a28fd2eefeee6859d768bdb1}\label{asm_2z80_2string_8h_a81863156a28fd2eefeee6859d768bdb1}}
+\index{string.h@{string.h}!reverse@{reverse}}
+\index{reverse@{reverse}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{reverse()}{reverse()}}
+{\footnotesize\ttfamily char$\ast$ reverse (\begin{DoxyParamCaption}\item[{char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Reverses the characters in a string
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Pointer to string to reverse.\\
+\hline
+\end{DoxyParams}
+For example \textquotesingle{}abcdefg\textquotesingle{} will become \textquotesingle{}gfedcba\textquotesingle{}.
+
+Banked as the string must be modifiable.
+
+Returns\+: Pointer to {\bfseries{s}} \mbox{\Hypertarget{asm_2z80_2string_8h_a13c88f5a8475fd7de5d81553cb29724a}\label{asm_2z80_2string_8h_a13c88f5a8475fd7de5d81553cb29724a}}
+\index{string.h@{string.h}!strcat@{strcat}}
+\index{strcat@{strcat}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strcat()}{strcat()}}
+{\footnotesize\ttfamily char$\ast$ strcat (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2 }\end{DoxyParamCaption})}
+
+Concatenate Strings. Appends string {\bfseries{s2}} to the end of string {\bfseries{s1}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to append onto \\
+\hline
+{\em s2} & String to copy from\\
+\hline
+\end{DoxyParams}
+For example \textquotesingle{}abc\textquotesingle{} and \textquotesingle{}def\textquotesingle{} will become \textquotesingle{}abcdef\textquotesingle{}.
+
+String {\bfseries{s1}} must be large enough to store both {\bfseries{s1}} and {\bfseries{s2}}.
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2z80_2string_8h_ac952c3ccec84a458a4d385c5273c1ca0}\label{asm_2z80_2string_8h_ac952c3ccec84a458a4d385c5273c1ca0}}
+\index{string.h@{string.h}!strlen@{strlen}}
+\index{strlen@{strlen}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strlen()}{strlen()}}
+{\footnotesize\ttfamily int strlen (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Calculates the length of a string
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to calculate length of\\
+\hline
+\end{DoxyParams}
+Returns\+: Length of string not including the terminating `\textbackslash{}0' character. \mbox{\Hypertarget{asm_2z80_2string_8h_a168580a0ddcb7fe754a711309966c99d}\label{asm_2z80_2string_8h_a168580a0ddcb7fe754a711309966c99d}}
+\index{string.h@{string.h}!strncat@{strncat}}
+\index{strncat@{strncat}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncat()}{strncat()}}
+{\footnotesize\ttfamily char$\ast$ strncat (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Concatenate at most {\bfseries{n}} characters from string {\bfseries{s2}} onto the end of {\bfseries{s1}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to append onto \\
+\hline
+{\em s2} & String to copy from \\
+\hline
+{\em n} & Max number of characters to copy from {\bfseries{s2}}\\
+\hline
+\end{DoxyParams}
+String {\bfseries{s1}} must be large enough to store both {\bfseries{s1}} and {\bfseries{n}} characters of {\bfseries{s2}}
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2z80_2string_8h_a861dba2d93de82f087707bb795f5c602}\label{asm_2z80_2string_8h_a861dba2d93de82f087707bb795f5c602}}
+\index{string.h@{string.h}!strncmp@{strncmp}}
+\index{strncmp@{strncmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncmp()}{strncmp()}}
+{\footnotesize\ttfamily int strncmp (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Compare strings (at most n characters)\+:
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & First string to compare \\
+\hline
+{\em s2} & Second string to compare \\
+\hline
+{\em n} & Max number of characters to compare\\
+\hline
+\end{DoxyParams}
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{s1}} $>$ {\bfseries{s2}} \item 0 if {\bfseries{s1}} == {\bfseries{s2}} \item $<$ 0 if {\bfseries{s1}} $<$ {\bfseries{s2}} \end{DoxyItemize}
+\mbox{\Hypertarget{asm_2z80_2string_8h_a796a9459c4f362e51c00307044c40ed5}\label{asm_2z80_2string_8h_a796a9459c4f362e51c00307044c40ed5}}
+\index{string.h@{string.h}!strncpy@{strncpy}}
+\index{strncpy@{strncpy}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{strncpy()}{strncpy()}}
+{\footnotesize\ttfamily char$\ast$ strncpy (\begin{DoxyParamCaption}\item[{char $\ast$}]{s1, }\item[{const char $\ast$}]{s2, }\item[{int}]{n }\end{DoxyParamCaption})}
+
+Copy {\bfseries{n}} characters from string {\bfseries{s2}} to {\bfseries{s1}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em s1} & String to copy into \\
+\hline
+{\em s2} & String to copy from \\
+\hline
+{\em n} & Max number of characters to copy from {\bfseries{s2}}\\
+\hline
+\end{DoxyParams}
+If {\bfseries{s2}} is shorter than {\bfseries{n}}, the remaining bytes in {\bfseries{s1}} are filled with \textbackslash{}0.
+
+Warning\+: If there is no \textbackslash{}0 in the first {\bfseries{n}} bytes of {\bfseries{s2}} then {\bfseries{s1}} will not be null terminated.
+
+Returns\+: Pointer to {\bfseries{s1}} \mbox{\Hypertarget{asm_2z80_2string_8h_add78645dba711c548ab16d056fb83b7e}\label{asm_2z80_2string_8h_add78645dba711c548ab16d056fb83b7e}}
+\index{string.h@{string.h}!memcmp@{memcmp}}
+\index{memcmp@{memcmp}!string.h@{string.h}}
+\doxyparagraph{\texorpdfstring{memcmp()}{memcmp()}}
+{\footnotesize\ttfamily int memcmp (\begin{DoxyParamCaption}\item[{const void $\ast$}]{buf1, }\item[{const void $\ast$}]{buf2, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{count }\end{DoxyParamCaption})}
+
+Compares buffers
+
+
+\begin{DoxyParams}{Parameters}
+{\em buf1} & First buffer to compare \\
+\hline
+{\em buf2} & Second buffer to compare \\
+\hline
+{\em count} & Buffer length\\
+\hline
+\end{DoxyParams}
+Returns\+: \begin{DoxyItemize}
+\item $>$ 0 if {\bfseries{buf1}} $>$ {\bfseries{buf2}} \item 0 if {\bfseries{buf1}} == {\bfseries{buf2}} \item $<$ 0 if {\bfseries{buf1}} $<$ {\bfseries{buf2}} \end{DoxyItemize}
diff --git a/docs/latex/asm_2z80_2types_8h.tex b/docs/latex/asm_2z80_2types_8h.tex
new file mode 100644
index 00000000..9446d990
--- /dev/null
+++ b/docs/latex/asm_2z80_2types_8h.tex
@@ -0,0 +1,105 @@
+\hypertarget{asm_2z80_2types_8h}{}\doxysubsection{asm/z80/types.h File Reference}
+\label{asm_2z80_2types_8h}\index{asm/z80/types.h@{asm/z80/types.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}}
+\item
+\#define \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+\#define \mbox{\hyperlink{asm_2z80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}{\+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef signed char \mbox{\hyperlink{asm_2z80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}}
+\item
+typedef unsigned char \mbox{\hyperlink{asm_2z80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}
+\item
+typedef signed int \mbox{\hyperlink{asm_2z80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2z80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}}
+\item
+typedef signed long \mbox{\hyperlink{asm_2z80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}}
+\item
+typedef unsigned long \mbox{\hyperlink{asm_2z80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2z80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}
+\item
+typedef unsigned int \mbox{\hyperlink{asm_2z80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}\label{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}}
+\index{types.h@{types.h}!Z88DK\_CALLEE@{Z88DK\_CALLEE}}
+\index{Z88DK\_CALLEE@{Z88DK\_CALLEE}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{Z88DK\_CALLEE}{Z88DK\_CALLEE}}
+{\footnotesize\ttfamily \#define Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}
+
+\mbox{\Hypertarget{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}\label{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}}
+\index{types.h@{types.h}!Z88DK\_FASTCALL@{Z88DK\_FASTCALL}}
+\index{Z88DK\_FASTCALL@{Z88DK\_FASTCALL}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{Z88DK\_FASTCALL}{Z88DK\_FASTCALL}}
+{\footnotesize\ttfamily \#define Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}
+
+\mbox{\Hypertarget{asm_2z80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}\label{asm_2z80_2types_8h_a8de3167f7b52ff5a2f538858cb5e32d3}}
+\index{types.h@{types.h}!\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}}
+\index{\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{\_\_SIZE\_T\_DEFINED}{\_\_SIZE\_T\_DEFINED}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{asm_2z80_2types_8h_a7ebe70ceca856797319175e30bcf003d}\label{asm_2z80_2types_8h_a7ebe70ceca856797319175e30bcf003d}}
+\index{types.h@{types.h}!INT8@{INT8}}
+\index{INT8@{INT8}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT8}{INT8}}
+{\footnotesize\ttfamily typedef signed char \mbox{\hyperlink{asm_2gbz80_2types_8h_a7ebe70ceca856797319175e30bcf003d}{I\+N\+T8}}}
+
+Signed eight bit. \mbox{\Hypertarget{asm_2z80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}\label{asm_2z80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}}
+\index{types.h@{types.h}!UINT8@{UINT8}}
+\index{UINT8@{UINT8}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT8}{UINT8}}
+{\footnotesize\ttfamily typedef unsigned char \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}
+
+Unsigned eight bit. \mbox{\Hypertarget{asm_2z80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}\label{asm_2z80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}}
+\index{types.h@{types.h}!INT16@{INT16}}
+\index{INT16@{INT16}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT16}{INT16}}
+{\footnotesize\ttfamily typedef signed int \mbox{\hyperlink{asm_2gbz80_2types_8h_a18f1c7ce6c452edd933189d52294af8d}{I\+N\+T16}}}
+
+Signed sixteen bit. \mbox{\Hypertarget{asm_2z80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}\label{asm_2z80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}}
+\index{types.h@{types.h}!UINT16@{UINT16}}
+\index{UINT16@{UINT16}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT16}{UINT16}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a805c2c164bdd38d72a30c46e84fb568b}{U\+I\+N\+T16}}}
+
+Unsigned sixteen bit. \mbox{\Hypertarget{asm_2z80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}\label{asm_2z80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}}
+\index{types.h@{types.h}!INT32@{INT32}}
+\index{INT32@{INT32}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{INT32}{INT32}}
+{\footnotesize\ttfamily typedef signed long \mbox{\hyperlink{asm_2gbz80_2types_8h_a516ea33686d40a7f91f5644851ce7b5d}{I\+N\+T32}}}
+
+Signed 32 bit. \mbox{\Hypertarget{asm_2z80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}\label{asm_2z80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}}
+\index{types.h@{types.h}!UINT32@{UINT32}}
+\index{UINT32@{UINT32}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{UINT32}{UINT32}}
+{\footnotesize\ttfamily typedef unsigned long \mbox{\hyperlink{asm_2gbz80_2types_8h_a0b39d6d754cb24c708b0f2bdbe88130e}{U\+I\+N\+T32}}}
+
+Unsigned 32 bit. \mbox{\Hypertarget{asm_2z80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}\label{asm_2z80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}}
+\index{types.h@{types.h}!size\_t@{size\_t}}
+\index{size\_t@{size\_t}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{size\_t}{size\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}
+
+\mbox{\Hypertarget{asm_2z80_2types_8h_aeb756bd89bf86769edbefdef8135109f}\label{asm_2z80_2types_8h_aeb756bd89bf86769edbefdef8135109f}}
+\index{types.h@{types.h}!clock\_t@{clock\_t}}
+\index{clock\_t@{clock\_t}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{clock\_t}{clock\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}}}
+
+Returned from clock \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock}}
+\end{DoxySeeAlso}
diff --git a/docs/latex/assert_8h.tex b/docs/latex/assert_8h.tex
new file mode 100644
index 00000000..9e776a1a
--- /dev/null
+++ b/docs/latex/assert_8h.tex
@@ -0,0 +1,30 @@
+\hypertarget{assert_8h}{}\doxysubsection{assert.\+h File Reference}
+\label{assert_8h}\index{assert.h@{assert.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{assert_8h_af576bf8ffa22a44e53018c67095ffbf0}{assert}}(x)~((x) ? (void)0 \+: \mbox{\hyperlink{assert_8h_ad21a069a92c53643b2e3eaaa73a742fd}{\+\_\+\+\_\+assert}}(\#x, \+\_\+\+\_\+func\+\_\+\+\_\+, \+\_\+\+\_\+\+F\+I\+L\+E\+\_\+\+\_\+, \+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+))
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{assert_8h_ad21a069a92c53643b2e3eaaa73a742fd}{\+\_\+\+\_\+assert}} (const char $\ast$expression, const char $\ast$functionname, const char $\ast$filename, unsigned int linenumber)
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{assert_8h_af576bf8ffa22a44e53018c67095ffbf0}\label{assert_8h_af576bf8ffa22a44e53018c67095ffbf0}}
+\index{assert.h@{assert.h}!assert@{assert}}
+\index{assert@{assert}!assert.h@{assert.h}}
+\doxyparagraph{\texorpdfstring{assert}{assert}}
+{\footnotesize\ttfamily \#define assert(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~((x) ? (void)0 \+: \mbox{\hyperlink{assert_8h_ad21a069a92c53643b2e3eaaa73a742fd}{\+\_\+\+\_\+assert}}(\#x, \+\_\+\+\_\+func\+\_\+\+\_\+, \+\_\+\+\_\+\+F\+I\+L\+E\+\_\+\+\_\+, \+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+))}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{assert_8h_ad21a069a92c53643b2e3eaaa73a742fd}\label{assert_8h_ad21a069a92c53643b2e3eaaa73a742fd}}
+\index{assert.h@{assert.h}!\_\_assert@{\_\_assert}}
+\index{\_\_assert@{\_\_assert}!assert.h@{assert.h}}
+\doxyparagraph{\texorpdfstring{\_\_assert()}{\_\_assert()}}
+{\footnotesize\ttfamily void \+\_\+\+\_\+assert (\begin{DoxyParamCaption}\item[{const char $\ast$}]{expression, }\item[{const char $\ast$}]{functionname, }\item[{const char $\ast$}]{filename, }\item[{unsigned int}]{linenumber }\end{DoxyParamCaption})}
+
diff --git a/docs/latex/bcd_8h.tex b/docs/latex/bcd_8h.tex
new file mode 100644
index 00000000..436c8500
--- /dev/null
+++ b/docs/latex/bcd_8h.tex
@@ -0,0 +1,121 @@
+\hypertarget{bcd_8h}{}\doxysubsection{gb/bcd.h File Reference}
+\label{bcd_8h}\index{gb/bcd.h@{gb/bcd.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{bcd_8h_a5b336fcb3fc84fe505dc7e14d0ec17a7}{B\+C\+D\+\_\+\+H\+EX}}(v)~((\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}})(v))
+\item
+\#define \mbox{\hyperlink{bcd_8h_a8a3023920aa103a74c7d59007bcc7b6f}{M\+A\+K\+E\+\_\+\+B\+CD}}(v)~\mbox{\hyperlink{bcd_8h_a5b336fcb3fc84fe505dc7e14d0ec17a7}{B\+C\+D\+\_\+\+H\+EX}}(0x \#\# v)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{bcd_8h_af3d125e9dbb48d630cf7e2f7d1343ba1}{uint2bcd}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} i, \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$value) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{bcd_8h_a0b14c76afa669863ed43c080f5baca98}{bcd\+\_\+add}} (\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$sour, const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$value) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{bcd_8h_a743275b2ee21c93633a933a2d3073d4e}{bcd\+\_\+sub}} (\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$sour, const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$value) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{bcd_8h_aec09ce7373727160488408c65fc8a91e}{bcd2text}} (const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$bcd, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} tile\+\_\+offset, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$buffer) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Support for working with B\+CD (Binary Coded Decimal)
+
+See the example B\+CD project for additional details.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{bcd_8h_a5b336fcb3fc84fe505dc7e14d0ec17a7}\label{bcd_8h_a5b336fcb3fc84fe505dc7e14d0ec17a7}}
+\index{bcd.h@{bcd.h}!BCD\_HEX@{BCD\_HEX}}
+\index{BCD\_HEX@{BCD\_HEX}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{BCD\_HEX}{BCD\_HEX}}
+{\footnotesize\ttfamily \#define B\+C\+D\+\_\+\+H\+EX(\begin{DoxyParamCaption}\item[{}]{v }\end{DoxyParamCaption})~((\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}})(v))}
+
+\mbox{\Hypertarget{bcd_8h_a8a3023920aa103a74c7d59007bcc7b6f}\label{bcd_8h_a8a3023920aa103a74c7d59007bcc7b6f}}
+\index{bcd.h@{bcd.h}!MAKE\_BCD@{MAKE\_BCD}}
+\index{MAKE\_BCD@{MAKE\_BCD}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{MAKE\_BCD}{MAKE\_BCD}}
+{\footnotesize\ttfamily \#define M\+A\+K\+E\+\_\+\+B\+CD(\begin{DoxyParamCaption}\item[{}]{v }\end{DoxyParamCaption})~\mbox{\hyperlink{bcd_8h_a5b336fcb3fc84fe505dc7e14d0ec17a7}{B\+C\+D\+\_\+\+H\+EX}}(0x \#\# v)}
+
+Converts an integer value into B\+CD format
+
+A maximum of 8 digits may be used
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}\label{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}}
+\index{bcd.h@{bcd.h}!BCD@{BCD}}
+\index{BCD@{BCD}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{BCD}{BCD}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}}}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{bcd_8h_af3d125e9dbb48d630cf7e2f7d1343ba1}\label{bcd_8h_af3d125e9dbb48d630cf7e2f7d1343ba1}}
+\index{bcd.h@{bcd.h}!uint2bcd@{uint2bcd}}
+\index{uint2bcd@{uint2bcd}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{uint2bcd()}{uint2bcd()}}
+{\footnotesize\ttfamily void uint2bcd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{i, }\item[{\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{value }\end{DoxyParamCaption})}
+
+Converts integer {\bfseries{i}} into B\+CD format (Binary Coded Decimal)
+\begin{DoxyParams}{Parameters}
+{\em i} & Numeric value to convert \\
+\hline
+{\em value} & Pointer to a B\+CD variable to store the converted result \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{bcd_8h_a0b14c76afa669863ed43c080f5baca98}\label{bcd_8h_a0b14c76afa669863ed43c080f5baca98}}
+\index{bcd.h@{bcd.h}!bcd\_add@{bcd\_add}}
+\index{bcd\_add@{bcd\_add}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{bcd\_add()}{bcd\_add()}}
+{\footnotesize\ttfamily void bcd\+\_\+add (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{sour, }\item[{const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{value }\end{DoxyParamCaption})}
+
+Adds two numbers in B\+CD format\+: {\bfseries{sour}} += {\bfseries{value}}
+\begin{DoxyParams}{Parameters}
+{\em sour} & Pointer to a B\+CD value to add to (and where the result is stored) \\
+\hline
+{\em value} & Pointer to the B\+CD value to add to {\bfseries{sour}} \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{bcd_8h_a743275b2ee21c93633a933a2d3073d4e}\label{bcd_8h_a743275b2ee21c93633a933a2d3073d4e}}
+\index{bcd.h@{bcd.h}!bcd\_sub@{bcd\_sub}}
+\index{bcd\_sub@{bcd\_sub}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{bcd\_sub()}{bcd\_sub()}}
+{\footnotesize\ttfamily void bcd\+\_\+sub (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{sour, }\item[{const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{value }\end{DoxyParamCaption})}
+
+Subtracts two numbers in B\+CD format\+: {\bfseries{sour}} -\/= {\bfseries{value}}
+\begin{DoxyParams}{Parameters}
+{\em sour} & Pointer to a B\+CD value to subtract from (and where the result is stored) \\
+\hline
+{\em value} & Pointer to the B\+CD value to subtract from {\bfseries{sour}} \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{bcd_8h_aec09ce7373727160488408c65fc8a91e}\label{bcd_8h_aec09ce7373727160488408c65fc8a91e}}
+\index{bcd.h@{bcd.h}!bcd2text@{bcd2text}}
+\index{bcd2text@{bcd2text}!bcd.h@{bcd.h}}
+\doxyparagraph{\texorpdfstring{bcd2text()}{bcd2text()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} bcd2text (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{bcd_8h_a4813acd7f1852dd32b67175ca6aca2eb}{B\+CD}} $\ast$}]{bcd, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{tile\+\_\+offset, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{buffer }\end{DoxyParamCaption})}
+
+Convert a B\+CD number into an asciiz (null terminated) string and return the length
+\begin{DoxyParams}{Parameters}
+{\em bcd} & Pointer to B\+CD value to convert \\
+\hline
+{\em tile\+\_\+offset} & Optional per-\/character offset value to add (use 0 for none) \\
+\hline
+{\em buffer} & Buffer to store the result in\\
+\hline
+\end{DoxyParams}
+Returns\+: Length in characters (always 8)
+
+{\bfseries{buffer}} should be large enough to store the converted string (9 bytes\+: 8 characters + 1 for terminator)
+
+There are a couple different ways to use {\bfseries{tile\+\_\+offset}}. For example\+: \begin{DoxyItemize}
+\item It can be the Index of the Font Tile \textquotesingle{}0\textquotesingle{} in V\+R\+AM to allow the buffer to be used directly with \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}. \item It can also be set to the ascii value for character \textquotesingle{}0\textquotesingle{} so that the buffer is a normal string that can be passed to \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf}}. \end{DoxyItemize}
diff --git a/docs/latex/bgb__emu_8h.tex b/docs/latex/bgb__emu_8h.tex
new file mode 100644
index 00000000..a30ab2d3
--- /dev/null
+++ b/docs/latex/bgb__emu_8h.tex
@@ -0,0 +1,9 @@
+\hypertarget{bgb__emu_8h}{}\doxysubsection{gb/bgb\+\_\+emu.h File Reference}
+\label{bgb__emu_8h}\index{gb/bgb\_emu.h@{gb/bgb\_emu.h}}
+{\ttfamily \#include $<$gb/emu\+\_\+debug.\+h$>$}\newline
+
+
+\doxysubsubsection{Detailed Description}
+Shim for legacy use of \mbox{\hyperlink{bgb__emu_8h}{bgb\+\_\+emu.\+h}} which has been migrated to \mbox{\hyperlink{emu__debug_8h}{emu\+\_\+debug.\+h}}
+
+See the {\ttfamily emu\+\_\+debug} example project included with gbdk.
\ No newline at end of file
diff --git a/docs/latex/cgb_8h.tex b/docs/latex/cgb_8h.tex
new file mode 100644
index 00000000..10a9df2f
--- /dev/null
+++ b/docs/latex/cgb_8h.tex
@@ -0,0 +1,428 @@
+\hypertarget{cgb_8h}{}\doxysubsection{gb/cgb.h File Reference}
+\label{cgb_8h}\index{gb/cgb.h@{gb/cgb.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(r, g, \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~((((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}) \& 0x1f) $<$$<$ 10) $\vert$ (((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(g) \& 0x1f) $<$$<$ 5) $\vert$ (((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(r) \& 0x1f) $<$$<$ 0))
+\item
+\#define \mbox{\hyperlink{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}{R\+G\+B8}}(r, g, \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((r) $>$$>$ 3) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((g) $>$$>$ 3) $<$$<$ 5) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}) $>$$>$ 3) $<$$<$ 10))
+\item
+\#define \mbox{\hyperlink{cgb_8h_ab5a6e450fcf10402278fe585a421dbbd}{R\+G\+B\+H\+T\+ML}}(R\+G\+B24bit)~(\mbox{\hyperlink{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}{R\+G\+B8}}((((R\+G\+B24bit) $>$$>$ 16) \& 0x\+FF), (((R\+G\+B24bit) $>$$>$ 8) \& 0x\+FF), ((R\+G\+B24bit) \& 0x\+FF)))
+\item
+\#define \mbox{\hyperlink{cgb_8h_aa039288455af8a3812a35aa1e7b903e4}{R\+G\+B\+\_\+\+R\+ED}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 0, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ae29b6947ac7dca7db513e59f1cfcbf51}{R\+G\+B\+\_\+\+D\+A\+R\+K\+R\+ED}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(15, 0, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ab6c97468034c02fe204fd37036d9be15}{R\+G\+B\+\_\+\+G\+R\+E\+EN}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 31, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a1ee7a5d8fd635e9132a2820a60f9789d}{R\+G\+B\+\_\+\+D\+A\+R\+K\+G\+R\+E\+EN}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 15, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a0eff802f1ca228046476209dc01c76ad}{R\+G\+B\+\_\+\+B\+L\+UE}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 31)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ad44385fc245bbabf6da787dcc8930385}{R\+G\+B\+\_\+\+D\+A\+R\+K\+B\+L\+UE}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 15)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ad74a18fca945f257dc9d1b99f9edbd40}{R\+G\+B\+\_\+\+Y\+E\+L\+L\+OW}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 31, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a2727da9f8c0b09a67375575a00186e2a}{R\+G\+B\+\_\+\+D\+A\+R\+K\+Y\+E\+L\+L\+OW}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 21, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a2ce30ac984869b55594447722b9d0579}{R\+G\+B\+\_\+\+C\+Y\+AN}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 31, 31)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ae4fe0c6cfa46b0c4804425f23bb48f4c}{R\+G\+B\+\_\+\+A\+Q\+UA}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(28, 5, 22)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a59fb596d3d65cfc4d3cb7e5044b8b10a}{R\+G\+B\+\_\+\+P\+I\+NK}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 0, 31)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a9d5a5f880df6bd4b64e6546839d41101}{R\+G\+B\+\_\+\+P\+U\+R\+P\+LE}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 0, 21)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ae168f0f9864d4ed4be7807b9783f17f1}{R\+G\+B\+\_\+\+B\+L\+A\+CK}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a29b47e2361025eabcdc3bcbff2308044}{R\+G\+B\+\_\+\+D\+A\+R\+K\+G\+R\+AY}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(10, 10, 10)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a80efbf7b13421922fb174f3e6a3e235c}{R\+G\+B\+\_\+\+L\+I\+G\+H\+T\+G\+R\+AY}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 21, 21)
+\item
+\#define \mbox{\hyperlink{cgb_8h_ac1771f95d9887118764bd8a074e537e1}{R\+G\+B\+\_\+\+W\+H\+I\+TE}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 31, 31)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a90ef6e9a3d95516b1fef15076b1b4999}{R\+G\+B\+\_\+\+L\+I\+G\+H\+T\+F\+L\+E\+SH}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(30, 20, 15)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a7c2a437dfb89d663a1c2f0a7a9256474}{R\+G\+B\+\_\+\+B\+R\+O\+WN}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(10, 10, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a0a85d8d0da8edc5cce98f48701f903f7}{R\+G\+B\+\_\+\+O\+R\+A\+N\+GE}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(30, 20, 0)
+\item
+\#define \mbox{\hyperlink{cgb_8h_a9c8c3710151b2258ea8269850498703f}{R\+G\+B\+\_\+\+T\+E\+AL}}~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(15, 15, 0)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}{set\+\_\+bkg\+\_\+palette}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+palettes, \mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$rgb\+\_\+data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}{set\+\_\+sprite\+\_\+palette}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+palettes, \mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$rgb\+\_\+data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{cgb_8h_aa8881ff123f364f2e7d1e88c18f9fbca}{set\+\_\+bkg\+\_\+palette\+\_\+entry}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} entry, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} rgb\+\_\+data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{cgb_8h_aebeb7431ebd400baed34796a8f50ea58}{set\+\_\+sprite\+\_\+palette\+\_\+entry}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} entry, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} rgb\+\_\+data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}{cpu\+\_\+slow}} ()
+\item
+void \mbox{\hyperlink{cgb_8h_a884a743919b234cd9c37789380784d08}{cpu\+\_\+fast}} ()
+\item
+void \mbox{\hyperlink{cgb_8h_abd34836339579013c097ae4dea10c014}{set\+\_\+default\+\_\+palette}} ()
+\item
+void \mbox{\hyperlink{cgb_8h_ac2dd234782ac786758952496b017ab97}{cgb\+\_\+compatibility}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Support for the Color Game\+Boy (C\+GB).
+
+{\bfseries{Enabling C\+GB features}}
+
+To unlock and use C\+GB features and registers you need to change byte 0143h in the cartridge header. Otherwise, the C\+GB will operate in monochrome \char`\"{}\+Non C\+G\+B\char`\"{} compatibility mode. \begin{DoxyItemize}
+\item Use a value of {\bfseries{80h}} for games that support C\+GB and monochrome gameboys ~\newline
+ (with Lcc\+: {\bfseries{-\/Wm-\/yc}}, or makebin directly\+: {\bfseries{-\/yc}}) \item Use a value of {\bfseries{C0h}} for C\+GB only games. ~\newline
+ (with Lcc\+: {\bfseries{-\/Wm-\/yC}}, or makebin directly\+: {\bfseries{-\/yC}})\end{DoxyItemize}
+See the Pan Docs for more information C\+GB features.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}\label{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}}
+\index{cgb.h@{cgb.h}!RGB@{RGB}}
+\index{RGB@{RGB}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB}{RGB}}
+{\footnotesize\ttfamily \#define R\+GB(\begin{DoxyParamCaption}\item[{}]{r, }\item[{}]{g, }\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~((((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}) \& 0x1f) $<$$<$ 10) $\vert$ (((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(g) \& 0x1f) $<$$<$ 5) $\vert$ (((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(r) \& 0x1f) $<$$<$ 0))}
+
+Macro to create a C\+GB palette color entry out of 5-\/bit color components.
+
+
+\begin{DoxyParams}{Parameters}
+{\em r} & 5-\/bit Red Component, range 0 -\/ 31 (31 brightest) \\
+\hline
+{\em g} & 5-\/bit Green Component, range 0 -\/ 31 (31 brightest) \\
+\hline
+{\em b} & 5-\/bit Blue Component, range 0 -\/ 31 (31 brightest)\\
+\hline
+\end{DoxyParams}
+The resulting format is bitpacked B\+G\+R-\/555 in a uint16\+\_\+t.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}{set\+\_\+bkg\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}{set\+\_\+sprite\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}{R\+G\+B8()}}, \mbox{\hyperlink{cgb_8h_ab5a6e450fcf10402278fe585a421dbbd}{R\+G\+B\+H\+T\+M\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}\label{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}}
+\index{cgb.h@{cgb.h}!RGB8@{RGB8}}
+\index{RGB8@{RGB8}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB8}{RGB8}}
+{\footnotesize\ttfamily \#define R\+G\+B8(\begin{DoxyParamCaption}\item[{}]{r, }\item[{}]{g, }\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((r) $>$$>$ 3) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((g) $>$$>$ 3) $<$$<$ 5) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})((\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}) $>$$>$ 3) $<$$<$ 10))}
+
+Macro to create a C\+GB palette color entry out of 8-\/bit color components.
+
+
+\begin{DoxyParams}{Parameters}
+{\em r} & 8-\/bit Red Component, range 0 -\/ 255 (255 brightest) \\
+\hline
+{\em g} & 8-\/bit Green Component, range 0 -\/ 255 (255 brightest) \\
+\hline
+{\em b} & 8-\/bit Blue Component, range 0 -\/ 255 (255 brightest)\\
+\hline
+\end{DoxyParams}
+The resulting format is bitpacked B\+G\+R-\/555 in a uint16\+\_\+t.
+
+The lowest 3 bits of each color component are dropped during conversion.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}{set\+\_\+bkg\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}{set\+\_\+sprite\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}, \mbox{\hyperlink{cgb_8h_ab5a6e450fcf10402278fe585a421dbbd}{R\+G\+B\+H\+T\+M\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_ab5a6e450fcf10402278fe585a421dbbd}\label{cgb_8h_ab5a6e450fcf10402278fe585a421dbbd}}
+\index{cgb.h@{cgb.h}!RGBHTML@{RGBHTML}}
+\index{RGBHTML@{RGBHTML}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGBHTML}{RGBHTML}}
+{\footnotesize\ttfamily \#define R\+G\+B\+H\+T\+ML(\begin{DoxyParamCaption}\item[{}]{R\+G\+B24bit }\end{DoxyParamCaption})~(\mbox{\hyperlink{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}{R\+G\+B8}}((((R\+G\+B24bit) $>$$>$ 16) \& 0x\+FF), (((R\+G\+B24bit) $>$$>$ 8) \& 0x\+FF), ((R\+G\+B24bit) \& 0x\+FF)))}
+
+Macro to convert a 24 Bit R\+GB color to a C\+GB palette color entry.
+
+
+\begin{DoxyParams}{Parameters}
+{\em R\+G\+B24bit} & Bit packed R\+G\+B-\/888 color (0-\/255 for each color component).\\
+\hline
+\end{DoxyParams}
+The resulting format is bitpacked B\+G\+R-\/555 in a uint16\+\_\+t.
+
+The lowest 3 bits of each color component are dropped during conversion.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}{set\+\_\+bkg\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}{set\+\_\+sprite\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}, \mbox{\hyperlink{cgb_8h_a7d2ed0f10b2b74123a544327bbfd7564}{R\+G\+B8()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_aa039288455af8a3812a35aa1e7b903e4}\label{cgb_8h_aa039288455af8a3812a35aa1e7b903e4}}
+\index{cgb.h@{cgb.h}!RGB\_RED@{RGB\_RED}}
+\index{RGB\_RED@{RGB\_RED}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_RED}{RGB\_RED}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+R\+ED~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 0, 0)}
+
+Common colors based on the E\+GA default palette. \mbox{\Hypertarget{cgb_8h_ae29b6947ac7dca7db513e59f1cfcbf51}\label{cgb_8h_ae29b6947ac7dca7db513e59f1cfcbf51}}
+\index{cgb.h@{cgb.h}!RGB\_DARKRED@{RGB\_DARKRED}}
+\index{RGB\_DARKRED@{RGB\_DARKRED}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_DARKRED}{RGB\_DARKRED}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+D\+A\+R\+K\+R\+ED~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(15, 0, 0)}
+
+\mbox{\Hypertarget{cgb_8h_ab6c97468034c02fe204fd37036d9be15}\label{cgb_8h_ab6c97468034c02fe204fd37036d9be15}}
+\index{cgb.h@{cgb.h}!RGB\_GREEN@{RGB\_GREEN}}
+\index{RGB\_GREEN@{RGB\_GREEN}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_GREEN}{RGB\_GREEN}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+G\+R\+E\+EN~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 31, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a1ee7a5d8fd635e9132a2820a60f9789d}\label{cgb_8h_a1ee7a5d8fd635e9132a2820a60f9789d}}
+\index{cgb.h@{cgb.h}!RGB\_DARKGREEN@{RGB\_DARKGREEN}}
+\index{RGB\_DARKGREEN@{RGB\_DARKGREEN}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_DARKGREEN}{RGB\_DARKGREEN}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+D\+A\+R\+K\+G\+R\+E\+EN~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 15, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a0eff802f1ca228046476209dc01c76ad}\label{cgb_8h_a0eff802f1ca228046476209dc01c76ad}}
+\index{cgb.h@{cgb.h}!RGB\_BLUE@{RGB\_BLUE}}
+\index{RGB\_BLUE@{RGB\_BLUE}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_BLUE}{RGB\_BLUE}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+B\+L\+UE~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 31)}
+
+\mbox{\Hypertarget{cgb_8h_ad44385fc245bbabf6da787dcc8930385}\label{cgb_8h_ad44385fc245bbabf6da787dcc8930385}}
+\index{cgb.h@{cgb.h}!RGB\_DARKBLUE@{RGB\_DARKBLUE}}
+\index{RGB\_DARKBLUE@{RGB\_DARKBLUE}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_DARKBLUE}{RGB\_DARKBLUE}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+D\+A\+R\+K\+B\+L\+UE~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 15)}
+
+\mbox{\Hypertarget{cgb_8h_ad74a18fca945f257dc9d1b99f9edbd40}\label{cgb_8h_ad74a18fca945f257dc9d1b99f9edbd40}}
+\index{cgb.h@{cgb.h}!RGB\_YELLOW@{RGB\_YELLOW}}
+\index{RGB\_YELLOW@{RGB\_YELLOW}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_YELLOW}{RGB\_YELLOW}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+Y\+E\+L\+L\+OW~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 31, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a2727da9f8c0b09a67375575a00186e2a}\label{cgb_8h_a2727da9f8c0b09a67375575a00186e2a}}
+\index{cgb.h@{cgb.h}!RGB\_DARKYELLOW@{RGB\_DARKYELLOW}}
+\index{RGB\_DARKYELLOW@{RGB\_DARKYELLOW}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_DARKYELLOW}{RGB\_DARKYELLOW}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+D\+A\+R\+K\+Y\+E\+L\+L\+OW~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 21, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a2ce30ac984869b55594447722b9d0579}\label{cgb_8h_a2ce30ac984869b55594447722b9d0579}}
+\index{cgb.h@{cgb.h}!RGB\_CYAN@{RGB\_CYAN}}
+\index{RGB\_CYAN@{RGB\_CYAN}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_CYAN}{RGB\_CYAN}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+C\+Y\+AN~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 31, 31)}
+
+\mbox{\Hypertarget{cgb_8h_ae4fe0c6cfa46b0c4804425f23bb48f4c}\label{cgb_8h_ae4fe0c6cfa46b0c4804425f23bb48f4c}}
+\index{cgb.h@{cgb.h}!RGB\_AQUA@{RGB\_AQUA}}
+\index{RGB\_AQUA@{RGB\_AQUA}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_AQUA}{RGB\_AQUA}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+A\+Q\+UA~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(28, 5, 22)}
+
+\mbox{\Hypertarget{cgb_8h_a59fb596d3d65cfc4d3cb7e5044b8b10a}\label{cgb_8h_a59fb596d3d65cfc4d3cb7e5044b8b10a}}
+\index{cgb.h@{cgb.h}!RGB\_PINK@{RGB\_PINK}}
+\index{RGB\_PINK@{RGB\_PINK}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_PINK}{RGB\_PINK}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+P\+I\+NK~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 0, 31)}
+
+\mbox{\Hypertarget{cgb_8h_a9d5a5f880df6bd4b64e6546839d41101}\label{cgb_8h_a9d5a5f880df6bd4b64e6546839d41101}}
+\index{cgb.h@{cgb.h}!RGB\_PURPLE@{RGB\_PURPLE}}
+\index{RGB\_PURPLE@{RGB\_PURPLE}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_PURPLE}{RGB\_PURPLE}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+P\+U\+R\+P\+LE~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 0, 21)}
+
+\mbox{\Hypertarget{cgb_8h_ae168f0f9864d4ed4be7807b9783f17f1}\label{cgb_8h_ae168f0f9864d4ed4be7807b9783f17f1}}
+\index{cgb.h@{cgb.h}!RGB\_BLACK@{RGB\_BLACK}}
+\index{RGB\_BLACK@{RGB\_BLACK}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_BLACK}{RGB\_BLACK}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+B\+L\+A\+CK~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}( 0, 0, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a29b47e2361025eabcdc3bcbff2308044}\label{cgb_8h_a29b47e2361025eabcdc3bcbff2308044}}
+\index{cgb.h@{cgb.h}!RGB\_DARKGRAY@{RGB\_DARKGRAY}}
+\index{RGB\_DARKGRAY@{RGB\_DARKGRAY}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_DARKGRAY}{RGB\_DARKGRAY}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+D\+A\+R\+K\+G\+R\+AY~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(10, 10, 10)}
+
+\mbox{\Hypertarget{cgb_8h_a80efbf7b13421922fb174f3e6a3e235c}\label{cgb_8h_a80efbf7b13421922fb174f3e6a3e235c}}
+\index{cgb.h@{cgb.h}!RGB\_LIGHTGRAY@{RGB\_LIGHTGRAY}}
+\index{RGB\_LIGHTGRAY@{RGB\_LIGHTGRAY}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_LIGHTGRAY}{RGB\_LIGHTGRAY}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+L\+I\+G\+H\+T\+G\+R\+AY~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(21, 21, 21)}
+
+\mbox{\Hypertarget{cgb_8h_ac1771f95d9887118764bd8a074e537e1}\label{cgb_8h_ac1771f95d9887118764bd8a074e537e1}}
+\index{cgb.h@{cgb.h}!RGB\_WHITE@{RGB\_WHITE}}
+\index{RGB\_WHITE@{RGB\_WHITE}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_WHITE}{RGB\_WHITE}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+W\+H\+I\+TE~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(31, 31, 31)}
+
+\mbox{\Hypertarget{cgb_8h_a90ef6e9a3d95516b1fef15076b1b4999}\label{cgb_8h_a90ef6e9a3d95516b1fef15076b1b4999}}
+\index{cgb.h@{cgb.h}!RGB\_LIGHTFLESH@{RGB\_LIGHTFLESH}}
+\index{RGB\_LIGHTFLESH@{RGB\_LIGHTFLESH}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_LIGHTFLESH}{RGB\_LIGHTFLESH}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+L\+I\+G\+H\+T\+F\+L\+E\+SH~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(30, 20, 15)}
+
+\mbox{\Hypertarget{cgb_8h_a7c2a437dfb89d663a1c2f0a7a9256474}\label{cgb_8h_a7c2a437dfb89d663a1c2f0a7a9256474}}
+\index{cgb.h@{cgb.h}!RGB\_BROWN@{RGB\_BROWN}}
+\index{RGB\_BROWN@{RGB\_BROWN}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_BROWN}{RGB\_BROWN}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+B\+R\+O\+WN~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(10, 10, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a0a85d8d0da8edc5cce98f48701f903f7}\label{cgb_8h_a0a85d8d0da8edc5cce98f48701f903f7}}
+\index{cgb.h@{cgb.h}!RGB\_ORANGE@{RGB\_ORANGE}}
+\index{RGB\_ORANGE@{RGB\_ORANGE}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_ORANGE}{RGB\_ORANGE}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+O\+R\+A\+N\+GE~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(30, 20, 0)}
+
+\mbox{\Hypertarget{cgb_8h_a9c8c3710151b2258ea8269850498703f}\label{cgb_8h_a9c8c3710151b2258ea8269850498703f}}
+\index{cgb.h@{cgb.h}!RGB\_TEAL@{RGB\_TEAL}}
+\index{RGB\_TEAL@{RGB\_TEAL}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{RGB\_TEAL}{RGB\_TEAL}}
+{\footnotesize\ttfamily \#define R\+G\+B\+\_\+\+T\+E\+AL~\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+GB}}(15, 15, 0)}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}\label{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}}
+\index{cgb.h@{cgb.h}!palette\_color\_t@{palette\_color\_t}}
+\index{palette\_color\_t@{palette\_color\_t}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{palette\_color\_t}{palette\_color\_t}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}}}
+
+16 bit color entry
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}\label{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}}
+\index{cgb.h@{cgb.h}!set\_bkg\_palette@{set\_bkg\_palette}}
+\index{set\_bkg\_palette@{set\_bkg\_palette}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_palette()}{set\_bkg\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+palette (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+palettes, }\item[{\mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+Set C\+GB background palette(s).
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+palette} & Index of the first palette to write (0-\/7) \\
+\hline
+{\em nb\+\_\+palettes} & Number of palettes to write (1-\/8, max depends on first\+\_\+palette) \\
+\hline
+{\em rgb\+\_\+data} & Pointer to source palette data\\
+\hline
+\end{DoxyParams}
+Writes {\bfseries{nb\+\_\+palettes}} to background palette data starting at {\bfseries{first\+\_\+palette}}, Palette data is sourced from {\bfseries{rgb\+\_\+data}}.
+
+\begin{DoxyItemize}
+\item Each Palette is 8 bytes in size\+: 4 colors x 2 bytes per palette color entry. \item Each color (4 per palette) is packed as B\+G\+R-\/555 format (1\+:5\+:5\+:5, M\+S\+Bit \mbox{[}15\mbox{]} is unused). \item Each component (R, G, B) may have values from 0 -\/ 31 (5 bits), 31 is brightest.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}, \mbox{\hyperlink{cgb_8h_aa8881ff123f364f2e7d1e88c18f9fbca}{set\+\_\+bkg\+\_\+palette\+\_\+entry()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}\label{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}}
+\index{cgb.h@{cgb.h}!set\_sprite\_palette@{set\_sprite\_palette}}
+\index{set\_sprite\_palette@{set\_sprite\_palette}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_palette()}{set\_sprite\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+palette (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+palettes, }\item[{\mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+Set C\+GB sprite palette(s).
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+palette} & Index of the first palette to write (0-\/7) \\
+\hline
+{\em nb\+\_\+palettes} & Number of palettes to write (1-\/8, max depends on first\+\_\+palette) \\
+\hline
+{\em rgb\+\_\+data} & Pointer to source palette data\\
+\hline
+\end{DoxyParams}
+Writes {\bfseries{nb\+\_\+palettes}} to sprite palette data starting at {\bfseries{first\+\_\+palette}}, Palette data is sourced from {\bfseries{rgb\+\_\+data}}.
+
+\begin{DoxyItemize}
+\item Each Palette is 8 bytes in size\+: 4 colors x 2 bytes per palette color entry. \item Each color (4 per palette) is packed as B\+G\+R-\/555 format (1\+:5\+:5\+:5, M\+S\+Bit \mbox{[}15\mbox{]} is unused). \item Each component (R, G, B) may have values from 0 -\/ 31 (5 bits), 31 is brightest.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}, \mbox{\hyperlink{cgb_8h_aebeb7431ebd400baed34796a8f50ea58}{set\+\_\+sprite\+\_\+palette\+\_\+entry()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_aa8881ff123f364f2e7d1e88c18f9fbca}\label{cgb_8h_aa8881ff123f364f2e7d1e88c18f9fbca}}
+\index{cgb.h@{cgb.h}!set\_bkg\_palette\_entry@{set\_bkg\_palette\_entry}}
+\index{set\_bkg\_palette\_entry@{set\_bkg\_palette\_entry}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_palette\_entry()}{set\_bkg\_palette\_entry()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+palette\+\_\+entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{entry, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+Sets a single color in the specified C\+GB background palette.
+
+
+\begin{DoxyParams}{Parameters}
+{\em palette} & Index of the palette to modify (0-\/7) \\
+\hline
+{\em entry} & Index of color in palette to modify (0-\/3) \\
+\hline
+{\em rgb\+\_\+data} & New color data in B\+GR 15bpp format.\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_aa8851ca1f515ca55cbf9f6ff53b08e8a}{set\+\_\+bkg\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_aebeb7431ebd400baed34796a8f50ea58}\label{cgb_8h_aebeb7431ebd400baed34796a8f50ea58}}
+\index{cgb.h@{cgb.h}!set\_sprite\_palette\_entry@{set\_sprite\_palette\_entry}}
+\index{set\_sprite\_palette\_entry@{set\_sprite\_palette\_entry}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_palette\_entry()}{set\_sprite\_palette\_entry()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+palette\+\_\+entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{entry, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+Sets a single color in the specified C\+GB sprite palette.
+
+
+\begin{DoxyParams}{Parameters}
+{\em palette} & Index of the palette to modify (0-\/7) \\
+\hline
+{\em entry} & Index of color in palette to modify (0-\/3) \\
+\hline
+{\em rgb\+\_\+data} & New color data in B\+GR 15bpp format.\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a9ca9f825284da0db522d15aa2e42a4af}{set\+\_\+sprite\+\_\+palette()}}, \mbox{\hyperlink{cgb_8h_a4a118ad3ee36468a3fa616977a64864e}{R\+G\+B()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}\label{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}}
+\index{cgb.h@{cgb.h}!cpu\_slow@{cpu\_slow}}
+\index{cpu\_slow@{cpu\_slow}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{cpu\_slow()}{cpu\_slow()}}
+{\footnotesize\ttfamily void cpu\+\_\+slow (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Set C\+PU speed to slow (Normal Speed) operation.
+
+Interrupts are temporarily disabled and then re-\/enabled during this call.
+
+In this mode the C\+GB operates at the same speed as the D\+M\+G/\+Pocket/\+S\+GB models.
+
+\begin{DoxyItemize}
+\item You can check to see if \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}} before using this function.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a884a743919b234cd9c37789380784d08}{cpu\+\_\+fast()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_a884a743919b234cd9c37789380784d08}\label{cgb_8h_a884a743919b234cd9c37789380784d08}}
+\index{cgb.h@{cgb.h}!cpu\_fast@{cpu\_fast}}
+\index{cpu\_fast@{cpu\_fast}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{cpu\_fast()}{cpu\_fast()}}
+{\footnotesize\ttfamily void cpu\+\_\+fast (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Set C\+PU speed to fast (C\+GB Double Speed) operation.
+
+On startup the C\+GB operates in Normal Speed Mode and can be switched into Double speed mode (faster processing but also higher power consumption). See the Pan Docs for more information about which hardware features operate faster and which remain at Normal Speed.
+
+\begin{DoxyItemize}
+\item Interrupts are temporarily disabled and then re-\/enabled during this call. \item You can check to see if \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}} before using this function.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}{cpu\+\_\+slow()}}, \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{cgb_8h_abd34836339579013c097ae4dea10c014}\label{cgb_8h_abd34836339579013c097ae4dea10c014}}
+\index{cgb.h@{cgb.h}!set\_default\_palette@{set\_default\_palette}}
+\index{set\_default\_palette@{set\_default\_palette}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{set\_default\_palette()}{set\_default\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+default\+\_\+palette (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Set palette, compatible with the D\+M\+G/\+G\+BP.
+
+The default/first C\+GB palettes for sprites and backgrounds are set to a similar default appearance as on the D\+M\+G/\+Pocket/\+S\+GB models. (White, Light Gray, Dark Gray, Black)
+
+\begin{DoxyItemize}
+\item You can check to see if \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}} before using this function. \end{DoxyItemize}
+\mbox{\Hypertarget{cgb_8h_ac2dd234782ac786758952496b017ab97}\label{cgb_8h_ac2dd234782ac786758952496b017ab97}}
+\index{cgb.h@{cgb.h}!cgb\_compatibility@{cgb\_compatibility}}
+\index{cgb\_compatibility@{cgb\_compatibility}!cgb.h@{cgb.h}}
+\doxyparagraph{\texorpdfstring{cgb\_compatibility()}{cgb\_compatibility()}}
+{\footnotesize\ttfamily void cgb\+\_\+compatibility (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+This function is obsolete
\ No newline at end of file
diff --git a/docs/latex/console_8h.tex b/docs/latex/console_8h.tex
new file mode 100644
index 00000000..bec0f519
--- /dev/null
+++ b/docs/latex/console_8h.tex
@@ -0,0 +1,78 @@
+\hypertarget{console_8h}{}\doxysubsection{gbdk/console.h File Reference}
+\label{console_8h}\index{gbdk/console.h@{gbdk/console.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}{gotoxy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{console_8h_a03528dec6542c497a3645dec3e8f0770}{posx}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{console_8h_a1e39e68fcb61161e1855b06ad5782be9}{posy}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{console_8h_a6ce1d0ff40a295e36bcb6d495947c8dc}{setchar}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{console_8h_a4826277cc150ddc0f4de4bd464a34909}{cls}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Console functions that work like Turbo C\textquotesingle{}s.
+
+The font is 8x8, making the screen 20x18 characters.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}\label{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}}
+\index{console.h@{console.h}!gotoxy@{gotoxy}}
+\index{gotoxy@{gotoxy}!console.h@{console.h}}
+\doxyparagraph{\texorpdfstring{gotoxy()}{gotoxy()}}
+{\footnotesize\ttfamily void gotoxy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Move the cursor to an absolute position at {\bfseries{x, y}}.
+
+{\bfseries{x}} and {\bfseries{y}} have units of tiles (8 pixels per unit) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{console_8h_a6ce1d0ff40a295e36bcb6d495947c8dc}{setchar()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{console_8h_a03528dec6542c497a3645dec3e8f0770}\label{console_8h_a03528dec6542c497a3645dec3e8f0770}}
+\index{console.h@{console.h}!posx@{posx}}
+\index{posx@{posx}!console.h@{console.h}}
+\doxyparagraph{\texorpdfstring{posx()}{posx()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} posx (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns the current X position of the cursor.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}{gotoxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{console_8h_a1e39e68fcb61161e1855b06ad5782be9}\label{console_8h_a1e39e68fcb61161e1855b06ad5782be9}}
+\index{console.h@{console.h}!posy@{posy}}
+\index{posy@{posy}!console.h@{console.h}}
+\doxyparagraph{\texorpdfstring{posy()}{posy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} posy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns the current Y position of the cursor.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}{gotoxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{console_8h_a6ce1d0ff40a295e36bcb6d495947c8dc}\label{console_8h_a6ce1d0ff40a295e36bcb6d495947c8dc}}
+\index{console.h@{console.h}!setchar@{setchar}}
+\index{setchar@{setchar}!console.h@{console.h}}
+\doxyparagraph{\texorpdfstring{setchar()}{setchar()}}
+{\footnotesize\ttfamily void setchar (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Writes out a single character at the current cursor position.
+
+Does not update the cursor or interpret the character.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{console_8h_a8b4f3b427a9c6d87a09e1983df077e58}{gotoxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{console_8h_a4826277cc150ddc0f4de4bd464a34909}\label{console_8h_a4826277cc150ddc0f4de4bd464a34909}}
+\index{console.h@{console.h}!cls@{cls}}
+\index{cls@{cls}!console.h@{console.h}}
+\doxyparagraph{\texorpdfstring{cls()}{cls()}}
+{\footnotesize\ttfamily void cls (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Clears the screen
\ No newline at end of file
diff --git a/docs/latex/crash__handler_8h.tex b/docs/latex/crash__handler_8h.tex
new file mode 100644
index 00000000..1c578948
--- /dev/null
+++ b/docs/latex/crash__handler_8h.tex
@@ -0,0 +1,30 @@
+\hypertarget{crash__handler_8h}{}\doxysubsection{gb/crash\+\_\+handler.h File Reference}
+\label{crash__handler_8h}\index{gb/crash\_handler.h@{gb/crash\_handler.h}}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{crash__handler_8h_a95aa98ab16e49eac55dcdfe42f4610cc}{\+\_\+\+\_\+\+Handle\+Crash}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+When crash\+\_\+handler.\+h is included, a crash dump screen will be displayed if the C\+PU executes uninitalized memory (with a value of 0x\+FF, the opcode for R\+ST 38). A handler is installed for R\+ST 38 that calls \mbox{\hyperlink{crash__handler_8h_a95aa98ab16e49eac55dcdfe42f4610cc}{\+\_\+\+\_\+\+Handle\+Crash()}}.
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{crash__handler_8h}{gb/crash\_handler.h}}>}}
+\end{DoxyCode}
+
+
+Also see the {\ttfamily crash} example project included with gbdk.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{crash__handler_8h_a95aa98ab16e49eac55dcdfe42f4610cc}\label{crash__handler_8h_a95aa98ab16e49eac55dcdfe42f4610cc}}
+\index{crash\_handler.h@{crash\_handler.h}!\_\_HandleCrash@{\_\_HandleCrash}}
+\index{\_\_HandleCrash@{\_\_HandleCrash}!crash\_handler.h@{crash\_handler.h}}
+\doxyparagraph{\texorpdfstring{\_\_HandleCrash()}{\_\_HandleCrash()}}
+{\footnotesize\ttfamily void \+\_\+\+\_\+\+Handle\+Crash (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Display the crash dump screen.
+
+See the intro for this file for more details.
\ No newline at end of file
diff --git a/docs/latex/ctype_8h.tex b/docs/latex/ctype_8h.tex
new file mode 100644
index 00000000..d86d4a6c
--- /dev/null
+++ b/docs/latex/ctype_8h.tex
@@ -0,0 +1,104 @@
+\hypertarget{ctype_8h}{}\doxysubsection{ctype.\+h File Reference}
+\label{ctype_8h}\index{ctype.h@{ctype.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdbool.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} \mbox{\hyperlink{ctype_8h_aa08b907b413d5f156b6214e72d0612bb}{isalpha}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+\mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} \mbox{\hyperlink{ctype_8h_a31e9b95a4c8bca65d901dca5c0c95c1f}{isupper}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+\mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} \mbox{\hyperlink{ctype_8h_a0b70d87c74367a00d03702a44da39614}{islower}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+\mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} \mbox{\hyperlink{ctype_8h_af3380cc4b95d21a135cd1b35fc9a09cc}{isdigit}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+\mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} \mbox{\hyperlink{ctype_8h_a48644b2a9c138472af0e1c83f688bd58}{isspace}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+char \mbox{\hyperlink{ctype_8h_a811b7a0d5194feaccfacf8a7f02bb9c3}{toupper}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\item
+char \mbox{\hyperlink{ctype_8h_a207391fc2c5fa7786d5e0b9ef8ba5e80}{tolower}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Character type functions.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{ctype_8h_aa08b907b413d5f156b6214e72d0612bb}\label{ctype_8h_aa08b907b413d5f156b6214e72d0612bb}}
+\index{ctype.h@{ctype.h}!isalpha@{isalpha}}
+\index{isalpha@{isalpha}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{isalpha()}{isalpha()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} isalpha (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns T\+R\+UE if the character {\bfseries{c}} is a letter (a-\/z, A-\/Z), otherwise F\+A\+L\+SE
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_a31e9b95a4c8bca65d901dca5c0c95c1f}\label{ctype_8h_a31e9b95a4c8bca65d901dca5c0c95c1f}}
+\index{ctype.h@{ctype.h}!isupper@{isupper}}
+\index{isupper@{isupper}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{isupper()}{isupper()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} isupper (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns T\+R\+UE if the character {\bfseries{c}} is an uppercase letter (A-\/Z), otherwise F\+A\+L\+SE
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_a0b70d87c74367a00d03702a44da39614}\label{ctype_8h_a0b70d87c74367a00d03702a44da39614}}
+\index{ctype.h@{ctype.h}!islower@{islower}}
+\index{islower@{islower}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{islower()}{islower()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} islower (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns T\+R\+UE if the character {\bfseries{c}} is a lowercase letter (a-\/z), otherwise F\+A\+L\+SE
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_af3380cc4b95d21a135cd1b35fc9a09cc}\label{ctype_8h_af3380cc4b95d21a135cd1b35fc9a09cc}}
+\index{ctype.h@{ctype.h}!isdigit@{isdigit}}
+\index{isdigit@{isdigit}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{isdigit()}{isdigit()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} isdigit (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns T\+R\+UE if the character {\bfseries{c}} is a digit (0-\/9), otherwise F\+A\+L\+SE
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_a48644b2a9c138472af0e1c83f688bd58}\label{ctype_8h_a48644b2a9c138472af0e1c83f688bd58}}
+\index{ctype.h@{ctype.h}!isspace@{isspace}}
+\index{isspace@{isspace}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{isspace()}{isspace()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}} isspace (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns T\+R\+UE if the character {\bfseries{c}} is a space (\textquotesingle{} \textquotesingle{}), tab (\textbackslash{}t), or newline (\textbackslash{}n) character, otherwise F\+A\+L\+SE
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_a811b7a0d5194feaccfacf8a7f02bb9c3}\label{ctype_8h_a811b7a0d5194feaccfacf8a7f02bb9c3}}
+\index{ctype.h@{ctype.h}!toupper@{toupper}}
+\index{toupper@{toupper}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{toupper()}{toupper()}}
+{\footnotesize\ttfamily char toupper (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns uppercase version of character {\bfseries{c}} if it is a letter (a-\/z), otherwise it returns the input value unchanged.
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{ctype_8h_a207391fc2c5fa7786d5e0b9ef8ba5e80}\label{ctype_8h_a207391fc2c5fa7786d5e0b9ef8ba5e80}}
+\index{ctype.h@{ctype.h}!tolower@{tolower}}
+\index{tolower@{tolower}!ctype.h@{ctype.h}}
+\doxyparagraph{\texorpdfstring{tolower()}{tolower()}}
+{\footnotesize\ttfamily char tolower (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Returns lowercase version of character {\bfseries{c}} if it is a letter (A-\/Z), otherwise it returns the input value unchanged.
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to test \\
+\hline
+\end{DoxyParams}
diff --git a/docs/latex/dir_287c0c0afb5e0fce0a7974866b95ef94.tex b/docs/latex/dir_287c0c0afb5e0fce0a7974866b95ef94.tex
new file mode 100644
index 00000000..39e758d5
--- /dev/null
+++ b/docs/latex/dir_287c0c0afb5e0fce0a7974866b95ef94.tex
@@ -0,0 +1,13 @@
+\hypertarget{dir_287c0c0afb5e0fce0a7974866b95ef94}{}\doxysubsection{asm/gbz80 Directory Reference}
+\label{dir_287c0c0afb5e0fce0a7974866b95ef94}\index{asm/gbz80 Directory Reference@{asm/gbz80 Directory Reference}}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{gbz80_2provides_8h}{provides.\+h}}
+\item
+file \mbox{\hyperlink{asm_2gbz80_2stdarg_8h}{stdarg.\+h}}
+\item
+file \mbox{\hyperlink{asm_2gbz80_2string_8h}{string.\+h}}
+\item
+file \mbox{\hyperlink{asm_2gbz80_2types_8h}{types.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_49e56c817e5e54854c35e136979f97ca.tex b/docs/latex/dir_49e56c817e5e54854c35e136979f97ca.tex
new file mode 100644
index 00000000..e68bc18e
--- /dev/null
+++ b/docs/latex/dir_49e56c817e5e54854c35e136979f97ca.tex
@@ -0,0 +1,7 @@
+\hypertarget{dir_49e56c817e5e54854c35e136979f97ca}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs Directory Reference}
+\label{dir_49e56c817e5e54854c35e136979f97ca}\index{c:/gb/gbdk-\/2020/docs Directory Reference@{c:/gb/gbdk-\/2020/docs Directory Reference}}
+\doxysubsubsection*{Directories}
+\begin{DoxyCompactItemize}
+\item
+directory \mbox{\hyperlink{dir_ef3b2545113449f8f25e623a543d64e3}{pages}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_68ce43fa3f06453c3f79ef8becebb3b2.tex b/docs/latex/dir_68ce43fa3f06453c3f79ef8becebb3b2.tex
new file mode 100644
index 00000000..ad2c61c2
--- /dev/null
+++ b/docs/latex/dir_68ce43fa3f06453c3f79ef8becebb3b2.tex
@@ -0,0 +1,13 @@
+\hypertarget{dir_68ce43fa3f06453c3f79ef8becebb3b2}{}\doxysubsection{asm/z80 Directory Reference}
+\label{dir_68ce43fa3f06453c3f79ef8becebb3b2}\index{asm/z80 Directory Reference@{asm/z80 Directory Reference}}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{z80_2provides_8h}{provides.\+h}}
+\item
+file \mbox{\hyperlink{asm_2z80_2stdarg_8h}{stdarg.\+h}}
+\item
+file \mbox{\hyperlink{asm_2z80_2string_8h}{string.\+h}}
+\item
+file \mbox{\hyperlink{asm_2z80_2types_8h}{types.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_7a84f275fead463a4aefdc90fba00235.tex b/docs/latex/dir_7a84f275fead463a4aefdc90fba00235.tex
new file mode 100644
index 00000000..b5ec9bd2
--- /dev/null
+++ b/docs/latex/dir_7a84f275fead463a4aefdc90fba00235.tex
@@ -0,0 +1,13 @@
+\hypertarget{dir_7a84f275fead463a4aefdc90fba00235}{}\doxysubsection{sms Directory Reference}
+\label{dir_7a84f275fead463a4aefdc90fba00235}\index{sms Directory Reference@{sms Directory Reference}}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{sms_2gbdecompress_8h}{gbdecompress.\+h}}
+\item
+file \mbox{\hyperlink{sms_2hardware_8h}{hardware.\+h}}
+\item
+file \mbox{\hyperlink{sms_2metasprites_8h}{metasprites.\+h}}
+\item
+file \mbox{\hyperlink{sms_8h}{sms.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_9a64cddab8e5f6fe5be80d8f39cb6a1f.tex b/docs/latex/dir_9a64cddab8e5f6fe5be80d8f39cb6a1f.tex
new file mode 100644
index 00000000..b296d50c
--- /dev/null
+++ b/docs/latex/dir_9a64cddab8e5f6fe5be80d8f39cb6a1f.tex
@@ -0,0 +1,14 @@
+\hypertarget{dir_9a64cddab8e5f6fe5be80d8f39cb6a1f}{}\doxysubsection{asm Directory Reference}
+\label{dir_9a64cddab8e5f6fe5be80d8f39cb6a1f}\index{asm Directory Reference@{asm Directory Reference}}
+\doxysubsubsection*{Directories}
+\begin{DoxyCompactItemize}
+\item
+directory \mbox{\hyperlink{dir_287c0c0afb5e0fce0a7974866b95ef94}{gbz80}}
+\item
+directory \mbox{\hyperlink{dir_68ce43fa3f06453c3f79ef8becebb3b2}{z80}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{asm_2types_8h}{types.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_aedcfcf321a7f13aa34b51e3093299b2.tex b/docs/latex/dir_aedcfcf321a7f13aa34b51e3093299b2.tex
new file mode 100644
index 00000000..aa54cdc6
--- /dev/null
+++ b/docs/latex/dir_aedcfcf321a7f13aa34b51e3093299b2.tex
@@ -0,0 +1,27 @@
+\hypertarget{dir_aedcfcf321a7f13aa34b51e3093299b2}{}\doxysubsection{gbdk Directory Reference}
+\label{dir_aedcfcf321a7f13aa34b51e3093299b2}\index{gbdk Directory Reference@{gbdk Directory Reference}}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{k_2bcd_8h}{bcd.\+h}}
+\item
+file \mbox{\hyperlink{console_8h}{console.\+h}}
+\item
+file \mbox{\hyperlink{far__ptr_8h}{far\+\_\+ptr.\+h}}
+\item
+file \mbox{\hyperlink{font_8h}{font.\+h}}
+\item
+file \mbox{\hyperlink{gbdk_2gbdecompress_8h}{gbdecompress.\+h}}
+\item
+file \mbox{\hyperlink{gbdk-lib_8h}{gbdk-\/lib.\+h}}
+\item
+file \mbox{\hyperlink{incbin_8h}{incbin.\+h}}
+\item
+file \mbox{\hyperlink{gbdk_2metasprites_8h}{metasprites.\+h}}
+\item
+file \mbox{\hyperlink{platform_8h}{platform.\+h}}
+\item
+file \mbox{\hyperlink{rledecompress_8h}{rledecompress.\+h}}
+\item
+file \mbox{\hyperlink{version_8h}{version.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_bdfe001eb73b667f67d57fb851301eb1.tex b/docs/latex/dir_bdfe001eb73b667f67d57fb851301eb1.tex
new file mode 100644
index 00000000..da8ae8a7
--- /dev/null
+++ b/docs/latex/dir_bdfe001eb73b667f67d57fb851301eb1.tex
@@ -0,0 +1,29 @@
+\hypertarget{dir_bdfe001eb73b667f67d57fb851301eb1}{}\doxysubsection{gb Directory Reference}
+\label{dir_bdfe001eb73b667f67d57fb851301eb1}\index{gb Directory Reference@{gb Directory Reference}}
+\doxysubsubsection*{Files}
+\begin{DoxyCompactItemize}
+\item
+file \mbox{\hyperlink{bcd_8h}{bcd.\+h}}
+\item
+file \mbox{\hyperlink{bgb__emu_8h}{bgb\+\_\+emu.\+h}}
+\item
+file \mbox{\hyperlink{cgb_8h}{cgb.\+h}}
+\item
+file \mbox{\hyperlink{crash__handler_8h}{crash\+\_\+handler.\+h}}
+\item
+file \mbox{\hyperlink{drawing_8h}{drawing.\+h}}
+\item
+file \mbox{\hyperlink{emu__debug_8h}{emu\+\_\+debug.\+h}}
+\item
+file \mbox{\hyperlink{gb_8h}{gb.\+h}}
+\item
+file \mbox{\hyperlink{gb_2gbdecompress_8h}{gbdecompress.\+h}}
+\item
+file \mbox{\hyperlink{gb_2hardware_8h}{hardware.\+h}}
+\item
+file \mbox{\hyperlink{isr_8h}{isr.\+h}}
+\item
+file \mbox{\hyperlink{gb_2metasprites_8h}{metasprites.\+h}}
+\item
+file \mbox{\hyperlink{sgb_8h}{sgb.\+h}}
+\end{DoxyCompactItemize}
diff --git a/docs/latex/dir_ef3b2545113449f8f25e623a543d64e3.tex b/docs/latex/dir_ef3b2545113449f8f25e623a543d64e3.tex
new file mode 100644
index 00000000..92f89857
--- /dev/null
+++ b/docs/latex/dir_ef3b2545113449f8f25e623a543d64e3.tex
@@ -0,0 +1,2 @@
+\hypertarget{dir_ef3b2545113449f8f25e623a543d64e3}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages Directory Reference}
+\label{dir_ef3b2545113449f8f25e623a543d64e3}\index{c:/gb/gbdk-\/2020/docs/pages Directory Reference@{c:/gb/gbdk-\/2020/docs/pages Directory Reference}}
diff --git a/docs/latex/docs__index_8md.tex b/docs/latex/docs__index_8md.tex
new file mode 100644
index 00000000..e143f1a1
--- /dev/null
+++ b/docs/latex/docs__index_8md.tex
@@ -0,0 +1,2 @@
+\hypertarget{docs__index_8md}{}\doxysubsection{c\+:/gb/gbdk-\/2020/docs/pages/docs\+\_\+index.md File Reference}
+\label{docs__index_8md}\index{c:/gb/gbdk-\/2020/docs/pages/docs\_index.md@{c:/gb/gbdk-\/2020/docs/pages/docs\_index.md}}
diff --git a/docs/latex/docs_coding_guidelines.tex b/docs/latex/docs_coding_guidelines.tex
new file mode 100644
index 00000000..5e404d82
--- /dev/null
+++ b/docs/latex/docs_coding_guidelines.tex
@@ -0,0 +1,182 @@
+\hypertarget{docs_coding_guidelines_autotoc_md56}{}\doxysubsection{Learning C / C fundamentals}\label{docs_coding_guidelines_autotoc_md56}
+Writing games and other programs with G\+B\+DK will be much easier with a basic understanding of the C language. In particular, understanding how to use C on \char`\"{}\+Embedded Platforms\char`\"{} (small computing systems, such as the Game Boy) can help you write better code (smaller, faster, less error prone) and avoid common pitfals.
+
+\label{docs_coding_guidelines_docs_c_tutorials}%
+\Hypertarget{docs_coding_guidelines_docs_c_tutorials}%
+\hypertarget{docs_coding_guidelines_autotoc_md57}{}\doxysubsubsection{General C tutorials}\label{docs_coding_guidelines_autotoc_md57}
+
+\begin{DoxyItemize}
+\item \href{https://www.learn-c.org/}{\texttt{ https\+://www.\+learn-\/c.\+org/}}
+\item \href{https://www.tutorialspoint.com/cprogramming/index.htm}{\texttt{ https\+://www.\+tutorialspoint.\+com/cprogramming/index.\+htm}}
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md58}{}\doxysubsubsection{Embedded C introductions}\label{docs_coding_guidelines_autotoc_md58}
+
+\begin{DoxyItemize}
+\item \href{http://dsp-book.narod.ru/CPES.pdf}{\texttt{ http\+://dsp-\/book.\+narod.\+ru/\+C\+P\+E\+S.\+pdf}}
+\item \href{https://www.phaedsys.com/principals/bytecraft/bytecraftdata/bcfirststeps.pdf}{\texttt{ https\+://www.\+phaedsys.\+com/principals/bytecraft/bytecraftdata/bcfirststeps.\+pdf}}
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md59}{}\doxysubsubsection{Game Boy games in C}\label{docs_coding_guidelines_autotoc_md59}
+
+\begin{DoxyItemize}
+\item \href{https://gbdev.io/list.html\#c}{\texttt{ https\+://gbdev.\+io/list.\+html\#c}}
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md60}{}\doxysubsection{Understanding the hardware}\label{docs_coding_guidelines_autotoc_md60}
+In addition to understanding the C language it\textquotesingle{}s important to learn how the Game Boy hardware works. What it is capable of doing, what it isn\textquotesingle{}t able to do, and what resources are available to work with. A good way to do this is by reading the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}} and checking out the \mbox{\hyperlink{docs_links_and_tools_awesome_gb}{awesome\+\_\+gb}} list.\hypertarget{docs_coding_guidelines_autotoc_md61}{}\doxysubsection{Writing optimal C code for the Game Boy and S\+D\+CC}\label{docs_coding_guidelines_autotoc_md61}
+The following guidelines can result in better code for the Game Boy, even though some of the guidance may be contrary to typical advice for general purpose computers that have more resources and speed.\hypertarget{docs_coding_guidelines_autotoc_md62}{}\doxysubsubsection{Tools}\label{docs_coding_guidelines_autotoc_md62}
+\label{docs_coding_guidelines_const_gbtd_gbmb}%
+\Hypertarget{docs_coding_guidelines_const_gbtd_gbmb}%
+\hypertarget{docs_coding_guidelines_autotoc_md63}{}\doxyparagraph{G\+B\+T\+D / G\+B\+M\+B, Arrays and the \char`\"{}const\char`\"{} keyword}\label{docs_coding_guidelines_autotoc_md63}
+{\bfseries{Important}}\+: The old \mbox{\hyperlink{docs_links_and_tools_gbtd_gbmb}{G\+B\+T\+D/\+G\+B\+MB}} fails to include the {\ttfamily const} keyword when exporting to C source files for G\+B\+DK. That causes arrays to be created in R\+AM instead of R\+OM, which wastes R\+AM, uses a lot of R\+OM to initialize the R\+AM arrays and slows the compiler down a lot.
+
+\+\_\+\+\_\+\+Use of \mbox{\hyperlink{docs_links_and_tools_toxa_gbtd_gbmb}{toxa\textquotesingle{}s updated G\+B\+T\+D/\+G\+B\+MB}} is highly recommended.\+\_\+\+\_\+
+
+If you wish to use the original tools, you must add the {\ttfamily const} keyword every time the graphics are re-\/exported to C source files.\hypertarget{docs_coding_guidelines_autotoc_md64}{}\doxysubsubsection{Variables}\label{docs_coding_guidelines_autotoc_md64}
+
+\begin{DoxyItemize}
+\item Use 8-\/bit values as much as possible. They will be much more efficient and compact than 16 and 32 bit types.
+\item Prefer unsigned variables to signed ones\+: The code generated will be generally more efficient, especially when comparing two values.
+\item Use explicit types so you always know the size of your variables. {\ttfamily int8\+\_\+t, uint8\+\_\+t, int16\+\_\+t, uint16\+\_\+t, int32\+\_\+t, uint32\+\_\+t} and {\ttfamily bool}. These are standard types defined in {\ttfamily stdint.\+h} ({\ttfamily \#include $<$stdint.\+h$>$}) and {\ttfamily stdbool.\+h} ({\ttfamily \#include $<$stdbool.\+h$>$}).
+\item Global and local static variables are generally more efficient than local non-\/static variables (which go on the stack and are slower and can result in slower code).
+\item \label{docs_coding_guidelines_const_array_data}%
+\Hypertarget{docs_coding_guidelines_const_array_data}%
+ {\ttfamily const} keyword\+: Use const for arrays, structs and variables with read-\/only (constant) data. It will reduce R\+OM, R\+AM and C\+PU usage significantly. Non-\/{\ttfamily const} values are loaded from R\+OM into R\+AM inefficiently, and there is no benefit in loading them into the limited available R\+AM if they aren\textquotesingle{}t going to be changed.
+\item Here is how to delcare {\ttfamily const} pointers and variables\+:
+\begin{DoxyItemize}
+\item non-\/const pointer to a const variable\+: {\ttfamily const uint8\+\_\+t $\ast$ some\+\_\+pointer;}
+\item const pointer to a non-\/const variable\+: {\ttfamily uint8\+\_\+t $\ast$ const some\+\_\+pointer;}
+\item const pointer to a const variable\+: {\ttfamily const uint8\+\_\+t $\ast$ const some\+\_\+pointer;}
+\item \href{https://codeforwin.org/2017/11/constant-pointer-and-pointer-to-constant-in-c.html}{\texttt{ https\+://codeforwin.\+org/2017/11/constant-\/pointer-\/and-\/pointer-\/to-\/constant-\/in-\/c.\+html}}
+\item \href{https://stackoverflow.com/questions/21476869/constant-pointer-vs-pointer-to-constant}{\texttt{ https\+://stackoverflow.\+com/questions/21476869/constant-\/pointer-\/vs-\/pointer-\/to-\/constant}}
+\end{DoxyItemize}
+\item For calculated values that don\textquotesingle{}t change, pre-\/compute results once and store the result. Using lookup-\/tables and the like can improve speed and reduce code size. Macros can sometimes help. It may be beneficial to do the calculations with an outside tool and then include the result as C code in a const array.
+\item Use an advancing pointer ({\ttfamily some\+Struct-\/$>$var = x; some\+Struct++}) to loop through arrays of structs instead of using indexing each time in the loop {\ttfamily some\+Struct\mbox{[}i\mbox{]}.var = x}.
+\item When modifying variables that are also changed in an Interrupt Service Routine (I\+SR), wrap them the relevant code block in a {\ttfamily \+\_\+\+\_\+critical \{ \}} block. See \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#section.3.9}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#section.\+3.\+9}}
+\item When using constants and literals the {\ttfamily U}, {\ttfamily L} and {\ttfamily UL} postfixes can be used.
+\begin{DoxyItemize}
+\item {\ttfamily U} specifies that the constant is unsigned
+\item {\ttfamily L} specifies that the constant is long.
+\item N\+O\+TE\+: In S\+D\+CC 3.\+6.\+0, the default for char changed from signed to unsigned. The manual says to use {\ttfamily -\/-\/fsigned-\/char} for the old behavior, this option flag is included by default when compiling through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}}.
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_coding_guidelines_fixed_point_type}%
+\Hypertarget{docs_coding_guidelines_fixed_point_type}%
+
+\begin{DoxyItemize}
+\item A fixed point type ({\ttfamily fixed}) is included with G\+B\+DK when precision greater than whole numbers is required for 8 bit range values (since floating point is not included in G\+B\+DK).
+\end{DoxyItemize}
+
+See the \char`\"{}\+Simple Physics\char`\"{} sub-\/pixel example project.
+
+Code example\+: \begin{DoxyVerb} fixed player[2];
+ ...
+ // Modify player position using it's 16 bit representation
+ player[0].w += player_speed_x;
+ player[1].w += player_speed_y;
+ ...
+ // Use only the upper 8 bits for setting the sprite position
+ move_sprite(0, player[0].h ,player[1].h);
+\end{DoxyVerb}
+\hypertarget{docs_coding_guidelines_autotoc_md65}{}\doxysubsubsection{Code structure}\label{docs_coding_guidelines_autotoc_md65}
+
+\begin{DoxyItemize}
+\item Do not {\ttfamily \#include} {\ttfamily .c} source files into other {\ttfamily .c} source files. Instead create {\ttfamily .h} header files for them and include those. \href{https://www.tutorialspoint.com/cprogramming/c_header_files.htm}{\texttt{ https\+://www.\+tutorialspoint.\+com/cprogramming/c\+\_\+header\+\_\+files.\+htm}}
+\item Instead of using a blocking \mbox{\hyperlink{gb_8h_a2afae202a1f8ca59a12a6455bb909c5d}{delay()}} for things such as sprite animations/etc (which can prevent the rest of the game from continuing) many times it\textquotesingle{}s better to use a counter which performs an action once every N frames. \mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}} may be useful in these cases.
+\item When processing for a given frame is done and it is time to wait before starting the next frame, \mbox{\hyperlink{gb_8h_acd186eb292d441f9389e77b545a55619}{wait\+\_\+vbl\+\_\+done()}} can be used. It uses H\+A\+LT to put the C\+PU into a low power state until processing resumes. The C\+PU will wake up and resume processing at the end of the current frame when the Vertical Blanking interrupt is triggered.
+\item Minimize use of multiplication, modulo with non-\/powers of 2, and division with non-\/powers of 2. These operations have no corresponding C\+PU instructions (software functions), and hence are time costly.
+\begin{DoxyItemize}
+\item S\+D\+CC has some optimizations for\+:
+\begin{DoxyItemize}
+\item Division by powers of 2. For example {\ttfamily n /= 4u} will be optimized to {\ttfamily n $>$$>$= 2}.
+\item Modulo by powers of 2. For example\+: {\ttfamily (n \% 8)} will be optimized to {\ttfamily (n \& 0x7)}.
+\end{DoxyItemize}
+\item If you need decimal numbers to count or display a score, you can use the G\+B\+DK B\+CD (\href{https://en.wikipedia.org/wiki/Binary-coded_decimal}{\texttt{ binary coded decimal}}) number functions. See\+: \mbox{\hyperlink{k_2bcd_8h}{bcd.\+h}} and the {\ttfamily B\+CD} example project included with G\+B\+DK.
+\end{DoxyItemize}
+\item Avoid long lists of function parameters. Passing many parameters can add overhead, especially if the function is called often. When applicable globals and local static vars can be used instead.
+\item Use inline functions if the function is short. (with the {\ttfamily inline} keyword, such as {\ttfamily inline uint8\+\_\+t my\+Function() \{ ... \}})
+\item Do not use recursive functions
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md66}{}\doxysubsubsection{G\+B\+D\+K A\+P\+I/\+Library}\label{docs_coding_guidelines_autotoc_md66}
+
+\begin{DoxyItemize}
+\item stdio.\+h\+: If you have other ways of printing text, avoid including \mbox{\hyperlink{stdio_8h}{stdio.\+h}} and using functions such as \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}}. Including it will use a large number of the background tiles for font characters. If stdio.\+h is not included then that space will be available for use with other tiles instead.
+\item drawing.\+h\+: The Game Boy graphics hardware is not well suited to frame-\/buffer style graphics such as the kind provided in \mbox{\hyperlink{drawing_8h}{drawing.\+h}}. Due to that, most drawing functions (rectangles, circles, etc) will be slow . When possible it\textquotesingle{}s much faster and more efficient to work with the tiles and tile maps that the Game Boy hardware is built around.
+\item \mbox{\hyperlink{gb_8h_aae433db7d8e3ee4c095c254b8abd7b8b}{waitpad()}} and \mbox{\hyperlink{sms_8h_a955d3733e5018f18b17a572aff45cf26}{waitpadup}} check for input in a loop that doesn\textquotesingle{}t H\+A\+LT at all, so the C\+PU will be maxed out until it returns. One alternative is to write a function with a loop that checks input with \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}} and then waits a frame using \mbox{\hyperlink{gb_8h_acd186eb292d441f9389e77b545a55619}{wait\+\_\+vbl\+\_\+done()}} (which idles the C\+PU while waiting) before checking input again.
+\item \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}}\+: When testing for multiple different buttons, it\textquotesingle{}s best to read the joypad state {\itshape once} into a variable and then test using that variable (instead of making multiple calls).
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md67}{}\doxysubsubsection{Toolchain}\label{docs_coding_guidelines_autotoc_md67}
+
+\begin{DoxyItemize}
+\item See S\+D\+CC optimizations\+: \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#section.8.1}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#section.\+8.\+1}}
+\item Use profiling. Look at the A\+SM generated by the compiler, write several versions of a function, compare them and choose the faster one.
+\item Use the S\+D\+CC {\ttfamily -\/-\/max-\/allocs-\/per-\/node} flag with large values, such as {\ttfamily 50000}. {\ttfamily -\/-\/opt-\/code-\/speed} has a much smaller effect.
+\begin{DoxyItemize}
+\item G\+B\+D\+K-\/2020 (after v4.\+0.\+1) compiles the library with {\ttfamily -\/-\/max-\/allocs-\/per-\/node 50000}, but it must be turned on for your own code. ~\newline
+ (example\+: {\ttfamily lcc ... -\/Wf-\/-\/max-\/allocs-\/per-\/node50000} or {\ttfamily sdcc ... -\/-\/max-\/allocs-\/per-\/node 50000}).
+\item The other code/speed flags are {\ttfamily -\/-\/opt-\/code-\/speed} or {\ttfamily -\/-\/opt-\/code-\/size}.
+\end{DoxyItemize}
+\item Use current S\+D\+CC builds from \href{http://sdcc.sourceforge.net/snap.php}{\texttt{ http\+://sdcc.\+sourceforge.\+net/snap.\+php}} ~\newline
+ The minimum required version of S\+D\+CC will depend on the G\+B\+D\+K-\/2020 release. See \mbox{\hyperlink{docs_releases}{G\+B\+DK Releases}}
+\item Learn some A\+SM and inspect the compiler output to understand what the compiler is doing and how your code gets translated. This can help with writing better C code and with debugging.
+\end{DoxyItemize}
+
+\label{docs_coding_guidelines_docs_chars_varargs}%
+\Hypertarget{docs_coding_guidelines_docs_chars_varargs}%
+\hypertarget{docs_coding_guidelines_autotoc_md68}{}\doxysubsubsection{chars and vararg functions}\label{docs_coding_guidelines_autotoc_md68}
+In standard C when {\ttfamily chars} are passed to a function with variadic arguments (varargs, those delcared with {\ttfamily ...} as a parameter), such as \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}}, those {\ttfamily chars} get automatically promoted to {\ttfamily ints}. For an 8 bit cpu such as the Game Boy\textquotesingle{}s, this is not as efficient or desireable in most cases. So the default S\+D\+CC behavior, which G\+B\+D\+K-\/2020 expects, is that chars will remain chars and {\itshape not} get promoted to ints when {\bfseries{explicitly cast as chars while calling a varargs function}}.
+
+
+\begin{DoxyItemize}
+\item They must be explicitly re-\/cast when passing them to a varargs function, even though they are already declared as chars.
+\item Discussion in S\+D\+CC manual\+: ~\newline
+ \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#section.1.5}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#section.\+1.\+5}} ~\newline
+ \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#subsection.3.5.10}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#subsection.\+3.\+5.\+10}}
+\item If S\+D\+CC is invoked with -\/std-\/cxx (--std-\/c89, --std-\/c99, --std-\/c11, etc) then it will conform to standard C behavior and calling functions such as \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}} with chars may not work as expected.
+\end{DoxyItemize}
+
+For example\+: \begin{DoxyVerb}unsigned char i = 0x5A;
+
+// NO:
+// The char will get promoted to an int, producing incorrect printf output
+// The output will be: 5A 00
+printf("%hx %hx", i, i);
+
+// YES:
+// The char will remain a char and printf output will be as expected
+// The output will be: 5A 5A
+printf("%hx %hx", (unsigned char)i, (unsigned char)i);
+\end{DoxyVerb}
+
+
+Some functions that accept varargs\+:
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}{E\+M\+U\+\_\+printf}}, \mbox{\hyperlink{drawing_8h_a5f7a0ed309f9526e9be285146559848c}{gprintf()}}, \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}}, \mbox{\hyperlink{stdio_8h_a31913a297ee18548c81d482ef6bdbe0f}{sprintf()}}
+\end{DoxyItemize}
+
+Also See\+:
+\begin{DoxyItemize}
+\item Other cases of char to int promotion\+: \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#chapter.6}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#chapter.\+6}}
+\end{DoxyItemize}\hypertarget{docs_coding_guidelines_autotoc_md69}{}\doxysubsection{When C isn\textquotesingle{}t fast enough}\label{docs_coding_guidelines_autotoc_md69}
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000003}{Todo}}]Update and verify this section for the modernized S\+D\+CC and toolchain\end{DoxyRefDesc}
+
+
+For many applications C is fast enough but in intensive functions are sometimes better written in assembler. This section deals with interfacing your core C program with fast assembly sub routines.\hypertarget{docs_coding_guidelines_autotoc_md70}{}\doxysubsubsection{Calling convention}\label{docs_coding_guidelines_autotoc_md70}
+sdcc in common with almost all C compilers prepends a \textquotesingle{}\+\_\+\textquotesingle{} to any function names. For example the function printf(...) begins at the label \+\_\+printf\+:\+:. Note that all functions are declared global.
+
+The parameters to a function are pushed in right to left order with no aligning -\/ so a byte takes up a byte on the stack instead of the more natural word. So for example the function int store\+\_\+byte( uint16\+\_\+t addr, uint8\+\_\+t byte) would push \textquotesingle{}byte\textquotesingle{} onto the stack first then addr using a total of three bytes. As the return address is also pushed, the stack would contain\+: \begin{DoxyVerb} At SP+0 - the return address
+
+ At SP+2 - addr
+
+ At SP+4 - byte
+\end{DoxyVerb}
+
+
+Note that the arguments that are pushed first are highest in the stack due to how the Game Boy\textquotesingle{}s stack grows downwards.
+
+The function returns in DE.\hypertarget{docs_coding_guidelines_autotoc_md71}{}\doxysubsubsection{Variables and registers}\label{docs_coding_guidelines_autotoc_md71}
+C normally expects registers to be preserved across a function call. However in the case above as DE is used as the return value and HL is used for anything, only BC needs to be preserved.
+
+Getting at C variables is slightly tricky due to how local variables are allocated on the stack. However you shouldn\textquotesingle{}t be using the local variables of a calling function in any case. Global variables can be accessed by name by adding an underscore.\hypertarget{docs_coding_guidelines_autotoc_md72}{}\doxysubsubsection{Segments}\label{docs_coding_guidelines_autotoc_md72}
+The use of segments for code, data and variables is more noticeable in assembler. G\+B\+DK and S\+D\+CC define a number of default segments -\/ {\ttfamily \+\_\+\+C\+O\+DE}, {\ttfamily \+\_\+\+D\+A\+TA} and {\ttfamily \+\_\+\+B\+SS}. Two extra segments {\ttfamily \+\_\+\+H\+E\+A\+D\+ER} and {\ttfamily \+\_\+\+H\+E\+AP} exist for the Game Boy header and malloc heap respectively.
+
+The order these segments are linked together is determined by crt0.\+s and is currently {\ttfamily \+\_\+\+C\+O\+DE} in R\+OM, then {\ttfamily \+\_\+\+D\+A\+TA}, {\ttfamily \+\_\+\+B\+SS}, {\ttfamily \+\_\+\+H\+E\+AP} in W\+R\+AM, with {\ttfamily S\+T\+A\+CK} at the top of W\+R\+AM. {\ttfamily \+\_\+\+H\+E\+AP} is placed after {\ttfamily \+\_\+\+B\+SS} so that all spare memory is available for the malloc routines. To place code in other than the first two banks, use the segments {\ttfamily \+\_\+\+C\+O\+D\+E\+\_\+x} where x is the 16kB bank number.
+
+As the {\ttfamily \+\_\+\+B\+SS} segment occurs outside the R\+OM area you can only use .ds to reserve space in it.
+
+While you don\textquotesingle{}t have to use the {\ttfamily \+\_\+\+C\+O\+DE} and {\ttfamily \+\_\+\+D\+A\+TA} distinctions in assembler you may wish to do so consistancy.
\ No newline at end of file
diff --git a/docs/latex/docs_example_programs.tex b/docs/latex/docs_example_programs.tex
new file mode 100644
index 00000000..3cbddce1
--- /dev/null
+++ b/docs/latex/docs_example_programs.tex
@@ -0,0 +1,63 @@
+G\+B\+DK includes several example programs both in C and in assembly. They are located in the examples directory, and in its subdirectories. They can be built by typing {\ttfamily make} in the correnponding directory.\hypertarget{docs_example_programs_autotoc_md139}{}\doxysubsection{banks (various projects)}\label{docs_example_programs_autotoc_md139}
+There are several different projects showing how to use R\+OM banking with G\+B\+DK.\hypertarget{docs_example_programs_autotoc_md140}{}\doxysubsection{comm}\label{docs_example_programs_autotoc_md140}
+Illustrates how to use communication routines.\hypertarget{docs_example_programs_autotoc_md141}{}\doxysubsection{crash}\label{docs_example_programs_autotoc_md141}
+Demonstrates how to use the optional G\+B\+DK crash handler which dumps debug info to the Game Boy screen in the event of a program crash.\hypertarget{docs_example_programs_autotoc_md142}{}\doxysubsection{colorbar}\label{docs_example_programs_autotoc_md142}
+The colorbar program, written by Mr. N.\+U. of Team\+K\+N\+Ox, illustrates the use of colors on a Color Game\+Boy.\hypertarget{docs_example_programs_autotoc_md143}{}\doxysubsection{dscan}\label{docs_example_programs_autotoc_md143}
+Deep Scan is a game written by Mr. N.\+U. of Team\+K\+N\+Ox that supports the Color Game\+Boy. Your aim is to destroy the submarines from your boat, and to avoid the projectiles that they send to you. The game should be self-\/explanatory. The following keys are used\+: \begin{DoxyVerb}RIGHT/LEFT : Move your boat
+A/B : Send a bomb from one side of your boat
+START : Start game or pause game
+
+When game is paused:
+
+SELECT : Invert A and B buttons
+RIGHT/LEFT : Change speed
+UP/DOWN : Change level
+\end{DoxyVerb}
+\hypertarget{docs_example_programs_autotoc_md144}{}\doxysubsection{filltest}\label{docs_example_programs_autotoc_md144}
+Demonstrates various graphics routines.\hypertarget{docs_example_programs_autotoc_md145}{}\doxysubsection{fonts}\label{docs_example_programs_autotoc_md145}
+Examples of how to work with the built in font and printing features.\hypertarget{docs_example_programs_autotoc_md146}{}\doxysubsection{galaxy}\label{docs_example_programs_autotoc_md146}
+A C translation of the space.\+s assembly program.\hypertarget{docs_example_programs_autotoc_md147}{}\doxysubsection{gb-\/dtmf}\label{docs_example_programs_autotoc_md147}
+The gb-\/dtmf, written by Osamu Ohashi, is a Dual Tone Multi-\/\+Frequency (D\+T\+MF) generator.\hypertarget{docs_example_programs_autotoc_md148}{}\doxysubsection{gbdecompress}\label{docs_example_programs_autotoc_md148}
+Demonstrates using gbdecompress to load a compressed tile set into vram.\hypertarget{docs_example_programs_autotoc_md149}{}\doxysubsection{irq}\label{docs_example_programs_autotoc_md149}
+Illustrates how to install interrupt handlers.\hypertarget{docs_example_programs_autotoc_md150}{}\doxysubsection{large map}\label{docs_example_programs_autotoc_md150}
+Shows how to scroll with maps larger than 32 x 32 tiles using \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap()}}. It fills rows and columns at the edges of the visible viewport (of the hardware Background Map) with the desired sub-\/region of the large map as it scrolls.\hypertarget{docs_example_programs_autotoc_md151}{}\doxysubsection{metasprites}\label{docs_example_programs_autotoc_md151}
+Demonstrates using the metasprite features to move and animate a large sprite.
+\begin{DoxyItemize}
+\item Press A button to show / hide the metasprite
+\item Press B button to cycle through the metasprite animations
+\item Press S\+E\+L\+E\+CT button to cycle the metasprite through Normal / Flip-\/Y / Flip-\/\+XY / Flip-\/X
+\item Up / Down / Left / Right to move the metasprite
+\end{DoxyItemize}\hypertarget{docs_example_programs_autotoc_md152}{}\doxysubsection{lcd isr wobble}\label{docs_example_programs_autotoc_md152}
+An example of how to use the L\+CD I\+SR for visual special effects\hypertarget{docs_example_programs_autotoc_md153}{}\doxysubsection{paint}\label{docs_example_programs_autotoc_md153}
+The paint example is a painting program. It supports different painting tools, drawing modes, and colors. At the moment, it only paints individual pixels. This program illustrates the use of the full-\/screen drawing library. It also illustrates the use of generic structures and big sprites. \begin{DoxyVerb}Arrow keys : Move the cursor
+SELECT : Display/hide the tools palette
+A : Select tool
+\end{DoxyVerb}
+\hypertarget{docs_example_programs_autotoc_md154}{}\doxysubsection{rand}\label{docs_example_programs_autotoc_md154}
+The rand program, written by Luc Van den Borre, illustrates the use of the G\+B\+DK random generator.\hypertarget{docs_example_programs_autotoc_md155}{}\doxysubsection{ram\+\_\+fn}\label{docs_example_programs_autotoc_md155}
+The ram\+\_\+fn example illustrates how to copy functions to R\+AM or H\+I\+R\+AM, and how to call them from C.\hypertarget{docs_example_programs_autotoc_md156}{}\doxysubsection{rpn}\label{docs_example_programs_autotoc_md156}
+A basic R\+PN calculator. Try entering expressions like 12 134$\ast$ and then 1789+.\hypertarget{docs_example_programs_autotoc_md157}{}\doxysubsection{samptest}\label{docs_example_programs_autotoc_md157}
+Demonstration of playing a sound sample.\hypertarget{docs_example_programs_autotoc_md158}{}\doxysubsection{sgb (various)}\label{docs_example_programs_autotoc_md158}
+A collection of examples showing how to use the Super Game Boy A\+PI features.
+
+\label{docs_example_programs_examples_sound_sample}%
+\Hypertarget{docs_example_programs_examples_sound_sample}%
+\hypertarget{docs_example_programs_autotoc_md159}{}\doxysubsection{sound}\label{docs_example_programs_autotoc_md159}
+The sound example is meant for experimenting with the soung generator of the Game\+Boy (to use on a real Game\+Boy). The four different sound modes of the Game\+Boy are available. It also demonstrates the use of bit fields in C (it\textquotesingle{}s a quick hack, so don\textquotesingle{}t expect too much from the code). The following keys are used\+: \begin{DoxyVerb}UP/DOWN : Move the cursor
+RIGHT/LEFT : Increment/decrement the value
+RIGHT/LEFT+A : Increment/decrement the value by 10
+RIGHT/LEFT+B : Set the value to maximum/minimum
+START : Play the current mode's sound (or all modes if in control screen)
+START+A : Play a little music with the current mode's sound
+SELECT : Change the sound mode (1, 2, 3, 4 and control)
+SELECT+A : Dump the sound registers to the screen
+\end{DoxyVerb}
+\hypertarget{docs_example_programs_autotoc_md160}{}\doxysubsection{space}\label{docs_example_programs_autotoc_md160}
+The space example is an assembly program that demonstrates the use of sprites, window, background, fixed-\/point values and more. The following keys are used\+: \begin{DoxyVerb}Arrow keys : Change the speed (and direction) of the sprite
+Arrow keys + A : Change the speed (and direction) of the window
+Arrow keys + B : Change the speed (and direction) of the background
+START : Open/close the door
+SELECT : Basic fading effect
+\end{DoxyVerb}
+\hypertarget{docs_example_programs_autotoc_md161}{}\doxysubsection{templates}\label{docs_example_programs_autotoc_md161}
+Two basic template examples are provided as a starting place for writing your G\+B\+DK programs.
\ No newline at end of file
diff --git a/docs/latex/docs_faq.tex b/docs/latex/docs_faq.tex
new file mode 100644
index 00000000..52a3bcdc
--- /dev/null
+++ b/docs/latex/docs_faq.tex
@@ -0,0 +1,159 @@
+\label{docs_faq_toolchain_faq}%
+\Hypertarget{docs_faq_toolchain_faq}%
+\hypertarget{docs_faq_autotoc_md162}{}\doxysubsection{General}\label{docs_faq_autotoc_md162}
+
+\begin{DoxyItemize}
+\item How can sound effects be made?
+\begin{DoxyItemize}
+\item The simplest way is to use the Game Boy sound hardware directly. See the \mbox{\hyperlink{docs_example_programs_examples_sound_sample}{Sound Example}} for a way to test out sounds on the hardware.
+\item Further discussion on using the Sound Example rom can be found in the Z\+GB wiki. Note that some example code there is Z\+GB specific and not part of the base G\+B\+DK A\+PI\+: \href{https://github.com/Zal0/ZGB/wiki/Sounds}{\texttt{ https\+://github.\+com/\+Zal0/\+Z\+G\+B/wiki/\+Sounds}}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_faq_autotoc_md163}{}\doxysubsection{Graphics and Resources}\label{docs_faq_autotoc_md163}
+
+\begin{DoxyItemize}
+\item How do I use a tile map when it\textquotesingle{}s tiles don\textquotesingle{}t start at index zero?
+\begin{DoxyItemize}
+\item The two main options are\+:
+\begin{DoxyItemize}
+\item Use \mbox{\hyperlink{gb_8h_a811c386cac0df2d260aacb5a43608be5}{set\+\_\+bkg\+\_\+based\+\_\+tiles()}}, \mbox{\hyperlink{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap()}}, \mbox{\hyperlink{gb_8h_a739a212609ae60c9c56c095f96b4ea80}{set\+\_\+win\+\_\+based\+\_\+tiles()}}, \mbox{\hyperlink{gb_8h_a1b8a1026983cb2b2c0bd46334b4692a0}{set\+\_\+win\+\_\+based\+\_\+submap()}} and provide a tile origin offset.
+\item Use \mbox{\hyperlink{docs_toolchain_utility_png2asset}{utility\+\_\+png2asset}} with {\ttfamily -\/tile\+\_\+origin} to create a map with the tile index offsets built in.
+\end{DoxyItemize}
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+~\newline
+\hypertarget{docs_faq_autotoc_md164}{}\doxysubsection{R\+O\+M Header Settings}\label{docs_faq_autotoc_md164}
+
+\begin{DoxyItemize}
+\item How do I set the R\+OM\textquotesingle{}s title?
+\begin{DoxyItemize}
+\item Use the \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} {\ttfamily -\/yn} flag. For example with \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} {\ttfamily -\/Wm-\/yn\char`\"{}\+M\+Y\+T\+I\+T\+L\+E\char`\"{}} or with \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} directly {\ttfamily -\/yn \char`\"{}\+M\+Y\+T\+I\+T\+L\+E\char`\"{}}. The maximum length is up to 15 characters, but may be shorter.
+\item See \char`\"{}0134-\/0143 -\/ Title\char`\"{} in \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}} for more details. ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_faq_faq_gb_type_header_setting}%
+\Hypertarget{docs_faq_faq_gb_type_header_setting}%
+
+\begin{DoxyItemize}
+\item How do I set S\+GB, Color only and Color compatibility in the R\+OM header?
+\begin{DoxyItemize}
+\item Use the following \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} flags. Prefix them with {\ttfamily -\/Wm} if using \mbox{\hyperlink{docs_toolchain_lcc}{lcc}}.
+\begin{DoxyItemize}
+\item {\ttfamily -\/yc} \+: Game\+Boy Color compatible
+\item {\ttfamily -\/yC} \+: Game\+Boy Color only
+\item {\ttfamily -\/ys} \+: Super Game\+Boy compatible ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item How do I set the R\+OM \mbox{\hyperlink{docs_rombanking_mbcs_MBC}{M\+BC}} type, and what M\+BC values are available to use with the {\ttfamily -\/yt} \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} flag?
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}{setting\+\_\+mbc\+\_\+and\+\_\+rom\+\_\+ram\+\_\+banks}} ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_faq_autotoc_md165}{}\doxysubsection{Errors / Compiling / Toolchain}\label{docs_faq_autotoc_md165}
+\label{docs_faq_faq_sdcc_peephole_instruction_error}%
+\Hypertarget{docs_faq_faq_sdcc_peephole_instruction_error}%
+
+\begin{DoxyItemize}
+\item What does {\ttfamily z80instruction\+Size() failed to parse line node, assuming 999 bytes} mean?
+\begin{DoxyItemize}
+\item This is a known issue with S\+D\+CC Peephole Optimizer parsing and can be ignored. A bug report has been filed for it. ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_faq_faq_bank_overflow_errors}%
+\Hypertarget{docs_faq_faq_bank_overflow_errors}%
+
+\begin{DoxyItemize}
+\item What do these kinds of warnings / errors mean? {\ttfamily W\+A\+R\+N\+I\+NG\+: possibly wrote twice at addr 4000 (93-\/$>$3E)} {\ttfamily Warning\+: Write from one bank spans into the next. 7ff7 -\/$>$ 8016 (bank 1 -\/$>$ 2)}
+\begin{DoxyItemize}
+\item You may have a overflow in one of your R\+OM banks. If there is more data allocated to a bank than it can hold it then will spill over into the next bank. The warnings are generated by \mbox{\hyperlink{docs_toolchain_ihxcheck}{ihxcheck}} during conversion of an .ihx file into a R\+OM file.
+
+See the section \mbox{\hyperlink{docs_rombanking_mbcs}{R\+O\+M/\+R\+AM Banking and M\+B\+Cs}} for more details about how banks work and what their size is. You may want to use a tool such as \mbox{\hyperlink{docs_links_and_tools_romusage}{romusage}} to calculate the amount of free and used space. ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_faq_faq_error_mbc_size}%
+\Hypertarget{docs_faq_faq_error_mbc_size}%
+
+\begin{DoxyItemize}
+\item What does {\ttfamily error\+: size of the buffer is too small} mean?
+\begin{DoxyItemize}
+\item Your program is using more banks than you have configured in the toolchain. Either the M\+BC type was not set, or the number of banks or M\+BC type should be changed to provide more banks.
+
+See the section \mbox{\hyperlink{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}{setting\+\_\+mbc\+\_\+and\+\_\+rom\+\_\+ram\+\_\+banks}} for more details. ~\newline
+
+\end{DoxyItemize}
+\item Why is the compiler so slow, or why did it suddenly get much slower?
+\begin{DoxyItemize}
+\item This may happen if you have large initialized arrays declared without the {\ttfamily const} keyword. It\textquotesingle{}s important to use the const keyword for read-\/only data. See \mbox{\hyperlink{docs_coding_guidelines_const_gbtd_gbmb}{const\+\_\+gbtd\+\_\+gbmb}} and \mbox{\hyperlink{docs_coding_guidelines_const_array_data}{const\+\_\+array\+\_\+data}} ~\newline
+
+\end{DoxyItemize}
+\item What flags should be enabled for debugging?
+\begin{DoxyItemize}
+\item You can use the \mbox{\hyperlink{docs_toolchain_lcc_debug}{lcc debug flag}} ~\newline
+
+\end{DoxyItemize}
+\item Is it possible to generate a debug symbol file ({\ttfamily .sym}) compatible with the \mbox{\hyperlink{docs_links_and_tools_bgb}{bgb}} emulator?
+\begin{DoxyItemize}
+\item Yes, turn on {\ttfamily .noi} output (L\+CC argument\+: {\ttfamily -\/Wl-\/j} or {\ttfamily -\/debug} and then use {\ttfamily -\/Wm-\/yS} with L\+CC (or {\ttfamily -\/yS} with makebin directly). ~\newline
+
+\end{DoxyItemize}
+\item How do I move the start of the {\ttfamily D\+A\+TA} section and the {\ttfamily Shadow O\+AM} location?
+\begin{DoxyItemize}
+\item The default locations are\+: {\ttfamily \+\_\+shadow\+\_\+\+O\+AM=0x\+C000} and 240 bytes after it {\ttfamily \+\_\+\+D\+A\+TA=0x\+C0\+A0}
+\item So, for example, if you wanted to move them both to start 256(0x100) bytes later, use these command line arguments for L\+CC\+:
+\begin{DoxyItemize}
+\item To change the Shadow O\+AM address\+: {\ttfamily -\/Wl-\/g\+\_\+shadow\+\_\+\+O\+AM=0x\+C100}
+\item To change the D\+A\+TA address (again, 240 bytes after the Shadow O\+AM)\+: {\ttfamily -\/Wl-\/b\+\_\+\+D\+A\+TA=0xc1a0}
+\end{DoxyItemize}
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+~\newline
+\hypertarget{docs_faq_autotoc_md166}{}\doxysubsection{A\+P\+I / Utilities}\label{docs_faq_autotoc_md166}
+
+\begin{DoxyItemize}
+\item Is there a list of all functions in the A\+PI?
+\begin{DoxyItemize}
+\item \href{globals_func.html}{\texttt{ Functions}}
+\item \href{globals_vars.html}{\texttt{ Variables}} ~\newline
+
+\end{DoxyItemize}
+\item Can I use the {\ttfamily float} type to do floating point math?
+\begin{DoxyItemize}
+\item There is no support for \textquotesingle{}float\textquotesingle{} in G\+B\+D\+K-\/2020.
+\item Instead consider some form of {\ttfamily fixed point} math (including the \mbox{\hyperlink{docs_coding_guidelines_fixed_point_type}{fixed}} type included in G\+B\+DK) ~\newline
+
+\end{DoxyItemize}
+\item Why are 8 bit numbers not printing correctly with \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}}?
+\begin{DoxyItemize}
+\item To correctly pass chars/uint8s for printing, they must be explicitly re-\/cast as such when calling the function. See docs\+\_\+chars\+\_\+varargs for more details. ~\newline
+
+\end{DoxyItemize}
+\item How can maps larger than 32x32 tiles be scrolled? \& Why is the map wrapping around to the left side when setting a map wider than 32 tiles with \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data()}}?
+\begin{DoxyItemize}
+\item The hardware Background map is 32 x 32 tiles. The screen viewport that can be scrolled around that map is 20 x 18 tiles. In order to scroll around within a much larger map, new tiles must be loaded at the edges of the screen viewport in the direction that it is being scrolled. \mbox{\hyperlink{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}{set\+\_\+bkg\+\_\+submap}} can be used to load those rows and columns of tiles from the desired sub-\/region of the large map.
+\item See the \char`\"{}\+Large Map\char`\"{} example program and \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap()}}
+\item Writes that exceed coordinate 31 of the Background tile map on the x or y axis will wrap around to the Left and Top edges. ~\newline
+
+\end{DoxyItemize}
+\item When using gbt\+\_\+player with music in banks, how can the current bank be restored after calling gbt\+\_\+update()? (since it changes the currently active bank without restoring it).
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{docs_rombanking_mbcs_banking_current_bank}{restoring the current bank}} ~\newline
+
+\end{DoxyItemize}
+\item How can C\+GB palettes and other sprite properties be used with metasprites?
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{Metasprites and sprite properties}} ~\newline
+
+\end{DoxyItemize}
+\item Weird things are happening to my sprite colors when I use png2asset and metasprites. What\textquotesingle{}s going on and how does it work?
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{docs_toolchain_utility_png2asset}{utility\+\_\+png2asset}} for details of how the conversion process works.
+\end{DoxyItemize}
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/docs_getting_started.tex b/docs/latex/docs_getting_started.tex
new file mode 100644
index 00000000..7664460e
--- /dev/null
+++ b/docs/latex/docs_getting_started.tex
@@ -0,0 +1,108 @@
+Follow the steps in this section to start using G\+B\+D\+K-\/2020.\hypertarget{docs_getting_started_autotoc_md6}{}\doxysubsection{1. Download a Release and unzip it}\label{docs_getting_started_autotoc_md6}
+You can get the latest releases from here\+: \href{https://github.com/gbdk-2020/gbdk-2020/releases}{\texttt{ https\+://github.\+com/gbdk-\/2020/gbdk-\/2020/releases}}\hypertarget{docs_getting_started_autotoc_md7}{}\doxysubsection{2. Compile Example projects}\label{docs_getting_started_autotoc_md7}
+Make sure your G\+B\+D\+K-\/2020 installation is working correctly by compiling some of the included \mbox{\hyperlink{docs_example_programs}{example projects}}.
+
+If everything in works in the steps below and there are no errors reported then each project that was build should have it\textquotesingle{}s on .gb R\+OM file (or suitable extension for the other supported targets).\hypertarget{docs_getting_started_autotoc_md8}{}\doxysubsubsection{Windows (without Make installed)\+:}\label{docs_getting_started_autotoc_md8}
+Navigate to a project within the example projects folder ({\ttfamily \char`\"{}examples\textbackslash{}gb\textbackslash{}\char`\"{}} under your G\+B\+D\+K-\/2020 install folder) and open a command line. Then type\+: \begin{DoxyVerb}compile
+\end{DoxyVerb}
+
+
+or \begin{DoxyVerb}compile.bat
+\end{DoxyVerb}
+
+
+This should build the example project. You can also navigate into other example project folders and build in the same way.\hypertarget{docs_getting_started_autotoc_md9}{}\doxysubsubsection{Linux / Mac\+O\+S / Windows with Make installed\+:}\label{docs_getting_started_autotoc_md9}
+Navigate to the example projects folder ({\ttfamily \char`\"{}examples/gb/\char`\"{}} under your G\+B\+D\+K-\/2020 install folder) and open a command line. Then type\+: \begin{DoxyVerb}make
+\end{DoxyVerb}
+
+
+This should build all of the examples sequentially. You can also navigate into an individual example project\textquotesingle{}s folder and build it by typing {\ttfamily make}.\hypertarget{docs_getting_started_autotoc_md10}{}\doxysubsection{3. Use a Template}\label{docs_getting_started_autotoc_md10}
+{\bfseries{To create a new project use a template!}}
+
+There are template projects included in the \mbox{\hyperlink{docs_example_programs}{G\+B\+DK example projects}} to help you get up and running. Their folder names start with {\ttfamily template\+\_\+}.
+
+
+\begin{DoxyEnumerate}
+\item Copy one of the template folders to a new folder name
+\item If you moved the folder out of the G\+B\+DK examples then you {\bfseries{must}} update the {\ttfamily G\+B\+DK} path variable and/or the path to {\ttfamily L\+CC} in the {\ttfamily Makefile} or {\ttfamily compile.\+bat} so that it will still build correctly.
+\item Type {\ttfamily make} on the command line in that folder to verify it still builds.
+\item Open main.\+c to start making changes.
+\end{DoxyEnumerate}\hypertarget{docs_getting_started_autotoc_md11}{}\doxysubsection{4. If you use G\+B\+T\+D / G\+B\+M\+B, get the fixed version}\label{docs_getting_started_autotoc_md11}
+If you plan to use G\+B\+TD / G\+B\+MB for making graphics, make sure to get the version with the {\ttfamily const} fix and other improvements. See \mbox{\hyperlink{docs_coding_guidelines_const_gbtd_gbmb}{const\+\_\+gbtd\+\_\+gbmb}}.\hypertarget{docs_getting_started_autotoc_md12}{}\doxysubsection{5. Review Coding Guidelines}\label{docs_getting_started_autotoc_md12}
+Take a look at the \mbox{\hyperlink{docs_coding_guidelines}{coding guidelines}}, even if you have experience writing software for other platforms. There is important information to help you get good results and performance on the Game Boy.
+
+If you haven\textquotesingle{}t written programs in C before, check the \mbox{\hyperlink{docs_coding_guidelines_docs_c_tutorials}{C tutorials section}}.\hypertarget{docs_getting_started_autotoc_md13}{}\doxysubsection{6. Hardware and Resources}\label{docs_getting_started_autotoc_md13}
+If you have a specific project in mind, consider what hardware want to target. It isn\textquotesingle{}t something that has to be decided up front, but it can influence design and implementation.
+
+What size will your game or program be?
+\begin{DoxyItemize}
+\item 32K Cart (no-\/\+M\+BC required)
+\item Larger than 32K (M\+BC required)
+\item See more details about \mbox{\hyperlink{docs_rombanking_mbcs}{R\+OM Banking and M\+B\+Cs}}.
+\end{DoxyItemize}
+
+What console platform(s) will it run on?
+\begin{DoxyItemize}
+\item Game Boy (G\+B/\+G\+BC)
+\item Analogue Pocket (AP)
+\item Sega Master System (S\+MS)
+\item Game Gear (GG)
+\item Mega Duck (D\+U\+CK)
+\item See \mbox{\hyperlink{docs_supported_consoles}{Supported Consoles \& Cross Compiling}}
+\end{DoxyItemize}
+
+If targeting the Game Boy, what hardware will it run on?
+\begin{DoxyItemize}
+\item Game Boy (\& Game Boy Color)
+\item Game Boy Color only
+\item Game Boy \& Super Game Boy
+\item See how to \mbox{\hyperlink{docs_faq_faq_gb_type_header_setting}{set the compatibility type in the cartridge header}}. Read more about hardware differences in the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}}
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md14}{}\doxysubsection{7. Set up C Source debugging}\label{docs_getting_started_autotoc_md14}
+Tracking down problems in code is easier with a debugger. Emulicious has a \mbox{\hyperlink{docs_links_and_tools_Emulicious_debug}{debug adapter}} that provides C source debugging with G\+B\+D\+K-\/2020.\hypertarget{docs_getting_started_autotoc_md15}{}\doxysubsection{8. Try a G\+B\+D\+K Tutorial}\label{docs_getting_started_autotoc_md15}
+You might want to start off with a guided G\+B\+DK tutorial from the \mbox{\hyperlink{docs_links_and_tools_links_gbdk_tutorials}{G\+B\+DK Tutorials section}}.
+
+
+\begin{DoxyItemize}
+\item {\bfseries{Note\+:}} Tutorials (or parts of them) may be based on the older G\+B\+DK from the 2000\textquotesingle{}s before it was updated to be G\+B\+D\+K-\/2020. The general principals are all the same, but the setup and parts of the \mbox{\hyperlink{docs_toolchain}{toolchain}} (compiler/etc) may be somewhat different and some links may be outdated (pointing to the old G\+B\+DK or old tools).
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md16}{}\doxysubsection{9. Read up!}\label{docs_getting_started_autotoc_md16}
+
+\begin{DoxyItemize}
+\item It is strongly encouraged to read more \mbox{\hyperlink{index_docs_index}{G\+B\+D\+K-\/2020 General Documentation}}.
+\item Learn about the Game Boy hardware by reading through the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}} technical reference.
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md17}{}\doxysubsection{10. Need help?}\label{docs_getting_started_autotoc_md17}
+Check out the links for \mbox{\hyperlink{docs_links_and_tools_links_help_and_community}{online community and support}} and read the \mbox{\hyperlink{docs_faq}{F\+AQ}}.\hypertarget{docs_getting_started_autotoc_md18}{}\doxysubsection{Migrating From Pre-\/\+G\+B\+D\+K-\/2020 Tutorials}\label{docs_getting_started_autotoc_md18}
+Several popular G\+B\+DK Tutorials, Videos and How-\/to\textquotesingle{}s were made before G\+B\+D\+K-\/2020 was available, as a result some information they include is outdated or incompatible. The following summarizes changes that should be made for best results.\hypertarget{docs_getting_started_autotoc_md19}{}\doxysubsubsection{Also see\+:}\label{docs_getting_started_autotoc_md19}
+
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_migrating_versions}{Migrating to new G\+B\+DK Versions}}
+\item \mbox{\hyperlink{docs_coding_guidelines}{Coding Guidelines}}
+\item \mbox{\hyperlink{docs_getting_started}{Getting Started}} (the section above this)
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md20}{}\doxysubsubsection{Use auto-\/banking}\label{docs_getting_started_autotoc_md20}
+G\+B\+D\+K-\/2020 now supports auto-\/banking (\mbox{\hyperlink{docs_rombanking_mbcs_rom_autobanking}{rom\+\_\+autobanking}}). In most cases using auto-\/banking will be easier and less error prone than manually assigning source and assets to banks.
+\begin{DoxyItemize}
+\item There is a source example {\ttfamily banks\+\_\+autobank} project.
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md21}{}\doxysubsubsection{Non-\/standard types (\+U\+I\+N\+T8, etc)}\label{docs_getting_started_autotoc_md21}
+The old G\+B\+DK types {\ttfamily U\+I\+N\+T8}, {\ttfamily I\+N\+T8}, {\ttfamily U\+I\+N\+T16}, {\ttfamily I\+N\+T16} are non-\/standard and less portable.
+
+The following should be used instead\+: {\ttfamily uint8\+\_\+t}, {\ttfamily int16\+\_\+t}, {\ttfamily uint16\+\_\+t}, {\ttfamily int32\+\_\+t}, {\ttfamily uint32\+\_\+t} and {\ttfamily bool}.
+
+These are standard types defined in {\ttfamily stdint.\+h} ({\ttfamily \#include $<$stdint.\+h$>$}) and {\ttfamily stdbool.\+h} ({\ttfamily \#include $<$stdbool.\+h$>$}).\hypertarget{docs_getting_started_autotoc_md22}{}\doxysubsubsection{If using G\+B\+T\+D / G\+B\+M\+B, get the fixed version}\label{docs_getting_started_autotoc_md22}
+If you plan to use G\+B\+TD / G\+B\+MB for making graphics, make sure to get the version with the {\ttfamily const} fix and other improvements. See \mbox{\hyperlink{docs_coding_guidelines_const_gbtd_gbmb}{const\+\_\+gbtd\+\_\+gbmb}}.\hypertarget{docs_getting_started_autotoc_md23}{}\doxysubsubsection{L\+C\+C and S\+D\+C\+C flags that are not needed}\label{docs_getting_started_autotoc_md23}
+The following flag is no longer needed with \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} and \mbox{\hyperlink{docs_toolchain_sdcc}{sdcc}}, it can be removed without any loss of performance.
+\begin{DoxyItemize}
+\item {\ttfamily -\/D\+U\+S\+E\+\_\+\+S\+FR}
+\begin{DoxyItemize}
+\item Behavior formerly enabled by U\+S\+E\+\_\+\+S\+F\+R\+\_\+\+F\+O\+R\+\_\+\+R\+EG is on by default now (no need to specify it, it isn\textquotesingle{}t a tested {\ttfamily \#ifdef} anymore). check here why\+: \href{https://gbdev.gg8.se/forums/viewtopic.php?id=697}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=697}}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md24}{}\doxysubsubsection{R\+O\+M Header Settings (such as Color, S\+G\+B, etc)}\label{docs_getting_started_autotoc_md24}
+Setting R\+OM bytes directly with {\ttfamily -\/Wl-\/yp0x$<$address$>$=0x$<$value$>$} is no longer supported. Instead use \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} flags. For example, use {\ttfamily -\/Wm-\/yC} instead of {\ttfamily -\/Wl-\/yp0x143=0x\+C0}. See \mbox{\hyperlink{docs_faq_faq_gb_type_header_setting}{faq\+\_\+gb\+\_\+type\+\_\+header\+\_\+setting}}.\hypertarget{docs_getting_started_autotoc_md25}{}\doxysubsubsection{G\+B\+D\+K Header include changes}\label{docs_getting_started_autotoc_md25}
+The following header files which are now cross platform were moved from {\ttfamily gb/} to {\ttfamily gbdk/}\+: {\ttfamily bcd.\+h}, {\ttfamily console.\+h}, {\ttfamily far\+\_\+ptr.\+h}, {\ttfamily font.\+h}, {\ttfamily gbdecompress.\+h}, {\ttfamily gbdk-\/lib.\+h}, {\ttfamily incbin.\+h}, {\ttfamily metasprites.\+h}, {\ttfamily platform.\+h}, {\ttfamily version.\+h}
+\begin{DoxyItemize}
+\item When including them use {\ttfamily \#include $<$gbdk/...$>$} instead of {\ttfamily \#include $<$gb/$>$}
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md26}{}\doxysubsubsection{Include .\+h headers, not .\+c source files}\label{docs_getting_started_autotoc_md26}
+Do not {\ttfamily \#include} {\ttfamily .c} source files into other {\ttfamily .c} source files. Instead create {\ttfamily .h} header files for them and include those.
+\begin{DoxyItemize}
+\item \href{https://www.tutorialspoint.com/cprogramming/c_header_files.htm}{\texttt{ https\+://www.\+tutorialspoint.\+com/cprogramming/c\+\_\+header\+\_\+files.\+htm}}
+\end{DoxyItemize}\hypertarget{docs_getting_started_autotoc_md27}{}\doxysubsubsection{Use the Template Projects}\label{docs_getting_started_autotoc_md27}
+Modern project templates are included with G\+B\+D\+K-\/2020. Using them (and their Makefile or compile.\+bat) as a starting point for projects is recommended and can help ensure better default settings and project organization.\hypertarget{docs_getting_started_autotoc_md28}{}\doxysubsubsection{Use h\+U\+G\+Etracker instead of gbt\+\_\+player}\label{docs_getting_started_autotoc_md28}
+h\+U\+G\+Etracker and it\textquotesingle{}s driver \mbox{\hyperlink{docs_links_and_tools_hUGEdriver}{h\+U\+G\+Edriver}} are smaller, more efficient and more versatile than gbt\+\_\+player.
\ No newline at end of file
diff --git a/docs/latex/docs_links_and_tools.tex b/docs/latex/docs_links_and_tools.tex
new file mode 100644
index 00000000..9b271b91
--- /dev/null
+++ b/docs/latex/docs_links_and_tools.tex
@@ -0,0 +1,190 @@
+This is a brief list of useful tools and information. It is not meant to be complete or exhaustive, for a larger list see the \mbox{\hyperlink{docs_links_and_tools_awesome_gb}{Awesome Game Boy Development}} list.
+
+\label{docs_links_and_tools_links_sdcc_docs}%
+\Hypertarget{docs_links_and_tools_links_sdcc_docs}%
+\hypertarget{docs_links_and_tools_autotoc_md29}{}\doxysubsection{S\+D\+C\+C Compiler Suite User Manual}\label{docs_links_and_tools_autotoc_md29}
+
+\begin{DoxyItemize}
+\item G\+B\+D\+K-\/2020 uses the S\+D\+CC compiler and related tools. The S\+D\+CC manual goes into much more detail about available features and how to use them. ~\newline
+ \href{http://sdcc.sourceforge.net/doc/sdccman.pdf}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf}} ~\newline
+ \href{http://sdcc.sourceforge.net}{\texttt{ http\+://sdcc.\+sourceforge.\+net}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_links_help_and_community}%
+\Hypertarget{docs_links_and_tools_links_help_and_community}%
+\hypertarget{docs_links_and_tools_autotoc_md30}{}\doxysubsection{Getting Help}\label{docs_links_and_tools_autotoc_md30}
+
+\begin{DoxyItemize}
+\item G\+B\+DK Discord community\+: ~\newline
+ \href{https://github.com/gbdk-2020/gbdk-2020/\#discord-servers}{\texttt{ https\+://github.\+com/gbdk-\/2020/gbdk-\/2020/\#discord-\/servers}}
+\item Game Boy discussion forum\+: ~\newline
+ \href{https://gbdev.gg8.se/forums/}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_links_gameboy_docs}%
+\Hypertarget{docs_links_and_tools_links_gameboy_docs}%
+\hypertarget{docs_links_and_tools_autotoc_md31}{}\doxysubsection{Game Boy Documentation}\label{docs_links_and_tools_autotoc_md31}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_Pandocs}%
+\Hypertarget{docs_links_and_tools_Pandocs}%
+ {\bfseries{Pandocs}} ~\newline
+ Extensive and up-\/to-\/date technical documentation about the Game Boy and related hardware. ~\newline
+ \href{https://gbdev.io/pandocs/}{\texttt{ https\+://gbdev.\+io/pandocs/}}
+\item \label{docs_links_and_tools_awesome_gb}%
+\Hypertarget{docs_links_and_tools_awesome_gb}%
+ {\bfseries{Awesome Game Boy Development list}} ~\newline
+ A list of Game Boy/\+Color development resources, tools, docs, related projects and homebrew. ~\newline
+ \href{https://gbdev.io/list.html}{\texttt{ https\+://gbdev.\+io/list.\+html}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_links_sms_gg_docs}%
+\Hypertarget{docs_links_and_tools_links_sms_gg_docs}%
+\hypertarget{docs_links_and_tools_autotoc_md32}{}\doxysubsection{Sega Master System / Game Gear Documentation}\label{docs_links_and_tools_autotoc_md32}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_smspower}%
+\Hypertarget{docs_links_and_tools_smspower}%
+ {\bfseries{S\+MS Power!}} ~\newline
+ Community site with technical documentation, reviews and other content related to the Sega 8-\/bit systems. \href{https://www.smspower.org/}{\texttt{ https\+://www.\+smspower.\+org/}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_links_gbdk_tutorials}%
+\Hypertarget{docs_links_and_tools_links_gbdk_tutorials}%
+\hypertarget{docs_links_and_tools_autotoc_md33}{}\doxysubsection{Tutorials}\label{docs_links_and_tools_autotoc_md33}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_tutorials_larolds}%
+\Hypertarget{docs_links_and_tools_tutorials_larolds}%
+ {\bfseries{Larold\textquotesingle{}s Jubilant Junkyard Tutorials}} ~\newline
+ Several walk throughs about the fundamentals of developing for the Game Boy with G\+B\+D\+K-\/2020. There are simple examples with source code. \href{https://laroldsjubilantjunkyard.com/tutorials/}{\texttt{ https\+://laroldsjubilantjunkyard.\+com/tutorials/}}
+\item \label{docs_links_and_tools_tutorials_gamingmonsters}%
+\Hypertarget{docs_links_and_tools_tutorials_gamingmonsters}%
+ {\bfseries{Gaming Monsters Tutorials}} ~\newline
+ Several video tutorials and code for making games with G\+B\+D\+K/\+G\+B\+D\+K-\/2020. ~\newline
+ \href{https://www.youtube.com/playlist?list=PLeEj4c2zF7PaFv5MPYhNAkBGrkx4iPGJo}{\texttt{ https\+://www.\+youtube.\+com/playlist?list=\+P\+Le\+Ej4c2z\+F7\+Pa\+Fv5\+M\+P\+Yh\+N\+Ak\+B\+Grkx4i\+P\+G\+Jo}} ~\newline
+ \href{https://github.com/gingemonster/GamingMonstersGameBoySampleCode}{\texttt{ https\+://github.\+com/gingemonster/\+Gaming\+Monsters\+Game\+Boy\+Sample\+Code}}
+\item \label{docs_links_and_tools_tutorials_typorter}%
+\Hypertarget{docs_links_and_tools_tutorials_typorter}%
+ {\bfseries{Pocket Leage Tutortial}} ~\newline
+ \href{https://blog.ty-porter.dev/development/2021/04/04/writing-a-gameboy-game-in-2021-pt-0.html}{\texttt{ https\+://blog.\+ty-\/porter.\+dev/development/2021/04/04/writing-\/a-\/gameboy-\/game-\/in-\/2021-\/pt-\/0.\+html}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_link_examples}%
+\Hypertarget{docs_links_and_tools_link_examples}%
+\hypertarget{docs_links_and_tools_autotoc_md34}{}\doxysubsection{Example code}\label{docs_links_and_tools_autotoc_md34}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_examples_gbdk_playground}%
+\Hypertarget{docs_links_and_tools_examples_gbdk_playground}%
+ {\bfseries{Simplified G\+B\+DK examples}} ~\newline
+ \href{https://github.com/mrombout/gbdk_playground/commits/master}{\texttt{ https\+://github.\+com/mrombout/gbdk\+\_\+playground/commits/master}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_links_graphic}%
+\Hypertarget{docs_links_and_tools_links_graphic}%
+\hypertarget{docs_links_and_tools_autotoc_md35}{}\doxysubsection{Graphics Tools}\label{docs_links_and_tools_autotoc_md35}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_gbtd_gbmb}%
+\Hypertarget{docs_links_and_tools_gbtd_gbmb}%
+\label{docs_links_and_tools_gbmb}%
+\Hypertarget{docs_links_and_tools_gbmb}%
+\label{docs_links_and_tools_gbtd}%
+\Hypertarget{docs_links_and_tools_gbtd}%
+ ~\newline
+ \label{docs_links_and_tools_toxa_gbtd_gbmb}%
+\Hypertarget{docs_links_and_tools_toxa_gbtd_gbmb}%
+ {\bfseries{Game Boy Tile Designer and Map Builder (G\+B\+TD / G\+B\+MB)}} ~\newline
+ Sprite / Tile editor and Map Builder that can export to C that works with G\+B\+DK. ~\newline
+ This is an updated version with const export fixed and other improvments. ~\newline
+ \href{https://github.com/gbdk-2020/GBTD_GBMB}{\texttt{ https\+://github.\+com/gbdk-\/2020/\+G\+B\+T\+D\+\_\+\+G\+B\+MB}}
+\begin{DoxyItemize}
+\item A G\+I\+MP plugin to read/write G\+B\+R/\+G\+BM files and do map conversion\+: ~\newline
+ \href{https://github.com/bbbbbr/gimp-tilemap-gb}{\texttt{ https\+://github.\+com/bbbbbr/gimp-\/tilemap-\/gb}}
+\item Command line version of the above tool that doesn\textquotesingle{}t require G\+I\+MP (png2gbtiles)\+: ~\newline
+ \href{https://github.com/bbbbbr/gimp-tilemap-gb/tree/master/console}{\texttt{ https\+://github.\+com/bbbbbr/gimp-\/tilemap-\/gb/tree/master/console}}
+\end{DoxyItemize}
+\item \label{docs_links_and_tools_Tilemap_Studio}%
+\Hypertarget{docs_links_and_tools_Tilemap_Studio}%
+ {\bfseries{Tilemap Studio}} ~\newline
+ A tilemap editor for Game Boy, G\+BC, G\+BA, or S\+N\+ES projects. ~\newline
+ \href{https://github.com/Rangi42/tilemap-studio/}{\texttt{ https\+://github.\+com/\+Rangi42/tilemap-\/studio/}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_tools_music}%
+\Hypertarget{docs_links_and_tools_tools_music}%
+\hypertarget{docs_links_and_tools_autotoc_md36}{}\doxysubsection{Music drivers and tools}\label{docs_links_and_tools_autotoc_md36}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_gbt-player}%
+\Hypertarget{docs_links_and_tools_gbt-player}%
+ {\bfseries{G\+BT Player}} ~\newline
+ A .mod converter and music driver that works with G\+B\+DK and R\+G\+B\+DS. ~\newline
+ \href{https://github.com/AntonioND/gbt-player}{\texttt{ https\+://github.\+com/\+Antonio\+N\+D/gbt-\/player}} ~\newline
+ Docs from G\+B\+Studio that should mostly apply\+: \href{https://www.gbstudio.dev/docs/music/}{\texttt{ https\+://www.\+gbstudio.\+dev/docs/music/}}
+\item \label{docs_links_and_tools_hUGEdriver}%
+\Hypertarget{docs_links_and_tools_hUGEdriver}%
+ {\bfseries{h\+U\+G\+Etracker}} and {\bfseries{h\+U\+G\+Edriver}} ~\newline
+ A tracker and music driver that work with G\+B\+DK and R\+G\+B\+DS. It is smaller, more efficient and more versatile than gbt\+\_\+player. ~\newline
+ \href{https://github.com/untoxa/hUGEBuild}{\texttt{ https\+://github.\+com/untoxa/h\+U\+G\+E\+Build}} ~\newline
+ \href{https://github.com/SuperDisk/hUGEDriver}{\texttt{ https\+://github.\+com/\+Super\+Disk/h\+U\+G\+E\+Driver}} ~\newline
+ \href{https://github.com/SuperDisk/hUGETracker}{\texttt{ https\+://github.\+com/\+Super\+Disk/h\+U\+G\+E\+Tracker}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_tools_emulators}%
+\Hypertarget{docs_links_and_tools_tools_emulators}%
+\hypertarget{docs_links_and_tools_autotoc_md37}{}\doxysubsection{Emulators}\label{docs_links_and_tools_autotoc_md37}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_bgb}%
+\Hypertarget{docs_links_and_tools_bgb}%
+ {\bfseries{B\+GB}} ~\newline
+ Accurate emulator, has useful debugging tools. ~\newline
+ \href{http://bgb.bircd.org/}{\texttt{ http\+://bgb.\+bircd.\+org/}}
+\item \label{docs_links_and_tools_emulicious}%
+\Hypertarget{docs_links_and_tools_emulicious}%
+ {\bfseries{Emulicious}} ~\newline
+ An accurate emulator with extensive tools including source level debugging. ~\newline
+ \href{https://emulicious.net/}{\texttt{ https\+://emulicious.\+net/}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_tools_debug}%
+\Hypertarget{docs_links_and_tools_tools_debug}%
+\hypertarget{docs_links_and_tools_autotoc_md38}{}\doxysubsection{Debugging tools}\label{docs_links_and_tools_autotoc_md38}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_Emulicious_debug}%
+\Hypertarget{docs_links_and_tools_Emulicious_debug}%
+ {\bfseries{Emulicious debug adapter}} ~\newline
+ Provides source-\/level debugging in VS Code that works with G\+B\+D\+K2020. ~\newline
+ \href{https://marketplace.visualstudio.com/items?itemName=emulicious.emulicious-debugger}{\texttt{ https\+://marketplace.\+visualstudio.\+com/items?item\+Name=emulicious.\+emulicious-\/debugger}}
+\item \label{docs_links_and_tools_romusage}%
+\Hypertarget{docs_links_and_tools_romusage}%
+ {\bfseries{romusage}} ~\newline
+ Calculate used and free space in banks (R\+O\+M/\+R\+AM) and warn about errors such as bank overflows. ~\newline
+ \href{https://github.com/bbbbbr/romusage}{\texttt{ https\+://github.\+com/bbbbbr/romusage}}
+\item \label{docs_links_and_tools_bgb_symbol_conversion}%
+\Hypertarget{docs_links_and_tools_bgb_symbol_conversion}%
+ {\bfseries{noi file to sym conversion for bgb}} ~\newline
+ Debug information in .noi files can be converted to a symbol format that \mbox{\hyperlink{docs_links_and_tools_bgb}{B\+GB}} recognizes using\+:
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/Wm-\/yS} (with {\ttfamily -\/-\/debug}, or {\ttfamily -\/Wl-\/j} to create the .noi)
+\item directly with \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} \+: {\ttfamily -\/yS} (with {\ttfamily -\/j} passed to the linker)
+\end{DoxyItemize}
+\item \label{docs_links_and_tools_src2sym}%
+\Hypertarget{docs_links_and_tools_src2sym}%
+ {\bfseries{src2sym.\+pl}} ~\newline
+ Add line-\/by-\/line C source code to the main symbol file in a B\+GB compatible format. This allows for C source-\/like debugging in B\+GB in a limited way. \href{https://gbdev.gg8.se/forums/viewtopic.php?id=710}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=710}}
+\end{DoxyItemize}
+
+\label{docs_links_and_tools_tools_build_ci_cd}%
+\Hypertarget{docs_links_and_tools_tools_build_ci_cd}%
+\hypertarget{docs_links_and_tools_autotoc_md39}{}\doxysubsection{Continuous Integration and Deployment}\label{docs_links_and_tools_autotoc_md39}
+
+\begin{DoxyItemize}
+\item \label{docs_links_and_tools_GBDK_GitHub_Action_Builder}%
+\Hypertarget{docs_links_and_tools_GBDK_GitHub_Action_Builder}%
+ {\bfseries{G\+B\+DK Git\+Hub Action Builder}} A Github Action which provides basic C\+I/\+CD for building projects based on G\+B\+DK (not for building G\+B\+DK itself). ~\newline
+ \href{https://github.com/wujood/gbdk-2020-github-builder}{\texttt{ https\+://github.\+com/wujood/gbdk-\/2020-\/github-\/builder}}
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/docs_migrating_versions.tex b/docs/latex/docs_migrating_versions.tex
new file mode 100644
index 00000000..760183ed
--- /dev/null
+++ b/docs/latex/docs_migrating_versions.tex
@@ -0,0 +1,101 @@
+This section contains information that may be useful to know or important when upgrading to a newer G\+B\+DK release.\hypertarget{docs_migrating_versions_autotoc_md167}{}\doxysubsection{G\+B\+D\+K 2020 versions}\label{docs_migrating_versions_autotoc_md167}
+\hypertarget{docs_migrating_versions_autotoc_md168}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+6}\label{docs_migrating_versions_autotoc_md168}
+
+\begin{DoxyItemize}
+\item Renamed {\ttfamily bgb\+\_\+emu.\+h} to {\ttfamily emu\+\_\+debug.\+h} and B\+G\+B\+\_\+$\ast$ functions to E\+M\+U\+\_\+$\ast$
+\begin{DoxyItemize}
+\item Aliases for the B\+G\+B\+\_\+$\ast$ ones and a {\ttfamily bgb\+\_\+emu.\+h} shim are present for backward compatibility, but updating to the new naming is recommended
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md169}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+5}\label{docs_migrating_versions_autotoc_md169}
+
+\begin{DoxyItemize}
+\item G\+B\+DK now requires S\+D\+CC 12259 or higher with G\+B\+D\+K-\/2020 patches
+\item \mbox{\hyperlink{docs_toolchain_utility_png2asset}{png2asset}} is the new name for the {\ttfamily png2mtspr} utility
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: Changed default output format when not specified from {\ttfamily .ihx} to {\ttfamily .gb} (or other active rom extension)
+\item The {\ttfamily \+\_\+\+B\+SS} area is deprecated (use {\ttfamily \+\_\+\+D\+A\+TA} instead)
+\item The {\ttfamily \+\_\+\+B\+A\+SE} area is renamed to {\ttfamily \+\_\+\+H\+O\+ME}
+\item Variables in static storage are now initialized to zero per C standard (but remaining W\+R\+AM is not cleared)
+\item \mbox{\hyperlink{stdlib_8h_aac2ea595a9ea8f5ebd883a0bc05eba5c}{itoa()}}, \mbox{\hyperlink{stdlib_8h_a38c070016cb06132360cfa5bacc2ed19}{uitoa()}}, \mbox{\hyperlink{stdlib_8h_a6374e62474a5a76c7ace9a59fb1cc829}{ltoa()}}, \mbox{\hyperlink{stdlib_8h_ac22b79fe0c1279eabc3daf57328008d2}{ultoa()}} all now require a radix value (base) argument to be passed. On the Game Boy and Analogue Pocket the parameter is required but not utilized.
+\item set\+\_\+bkg\+\_\+1bit\+\_\+data has been renamed to \mbox{\hyperlink{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}}
+\item The following header files which are now cross platform were moved from {\ttfamily gb/} to {\ttfamily gbdk/}\+: {\ttfamily bcd.\+h}, {\ttfamily console.\+h}, {\ttfamily far\+\_\+ptr.\+h}, {\ttfamily font.\+h}, {\ttfamily gbdecompress.\+h}, {\ttfamily gbdk-\/lib.\+h}, {\ttfamily incbin.\+h}, {\ttfamily metasprites.\+h}, {\ttfamily platform.\+h}, {\ttfamily version.\+h}
+\begin{DoxyItemize}
+\item When including them use {\ttfamily \#include $<$gbdk/...$>$} instead of {\ttfamily \#include $<$gb/$>$}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md170}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+4}\label{docs_migrating_versions_autotoc_md170}
+
+\begin{DoxyItemize}
+\item G\+B\+DK now requires S\+D\+CC 12238 or higher
+\item Made sample.\+h, cgb.\+h and sgb.\+h independent from gb.\+h
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md171}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+3}\label{docs_migrating_versions_autotoc_md171}
+
+\begin{DoxyItemize}
+\item No significant changes required
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md172}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+2}\label{docs_migrating_versions_autotoc_md172}
+
+\begin{DoxyItemize}
+\item The default font has been reduced from 256 to 96 characters.
+\begin{DoxyItemize}
+\item Code using special characters may need to be updated.
+\item The off-\/by-\/1 character index offset was removed for fonts. Old fonts with the offset need to be re-\/adjusted.
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md173}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0.\+1}\label{docs_migrating_versions_autotoc_md173}
+
+\begin{DoxyItemize}
+\item {\bfseries{Important!}} \+: The {\ttfamily W\+R\+AM} memory region is no longer automatically initialized to zeros during startup.
+\begin{DoxyItemize}
+\item Any variables which are declared without being initialized may have {\bfseries{indeterminate values instead of 0}} on startup. This might reveal previously hidden bugs in your code.
+\item Check your code for variables that are not initialized before use.
+\item In B\+GB you can turn on triggering exceptions (options panel) reading from unitialized R\+AM. This allows for some additional runtime detection of uninitialized vars.
+\end{DoxyItemize}
+\item In .ihx files, multiple writes to the same R\+OM address are now warned about using \mbox{\hyperlink{docs_toolchain_ihxcheck}{ihxcheck}}.
+\item {\ttfamily set\+\_\+$\ast$\+\_\+tiles()} now wrap maps around horizontal and vertical boundaries correctly. Code relying on it not wrapping correctly may be affected.
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md174}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 4.\+0}\label{docs_migrating_versions_autotoc_md174}
+
+\begin{DoxyItemize}
+\item G\+B\+DK now requires S\+D\+CC 4.\+0.\+3 or higher
+\item The old linker {\ttfamily link-\/gbz80} has been R\+E\+M\+O\+V\+ED, the linker \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} from S\+D\+CC is used.
+\begin{DoxyItemize}
+\item Due to the linker change, there are no longer warnings about multiple writes to the same R\+OM address.
+\end{DoxyItemize}
+\item G\+B\+DK now generates .ihx files, those are converted to a R\+OM using \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} (lcc can do this automatically in some use cases)
+\item Setting R\+OM bytes directly with {\ttfamily -\/Wl-\/yp0x$<$address$>$=0x$<$value$>$} is no longer supported. Instead use \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} flags. For example, use {\ttfamily -\/Wm-\/yC} instead of {\ttfamily -\/Wl-\/yp0x143=0x\+C0}. See \mbox{\hyperlink{docs_faq_faq_gb_type_header_setting}{faq\+\_\+gb\+\_\+type\+\_\+header\+\_\+setting}}.
+\item O\+AM symbol has been renamed to {\ttfamily \+\_\+shadow\+\_\+\+O\+AM}, that allows accessing shadow O\+AM directly from C code
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md175}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 3.\+2}\label{docs_migrating_versions_autotoc_md175}
+
+\begin{DoxyItemize}
+\item No significant changes required
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md176}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 3.\+1.\+1}\label{docs_migrating_versions_autotoc_md176}
+
+\begin{DoxyItemize}
+\item No significant changes required
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md177}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 3.\+1}\label{docs_migrating_versions_autotoc_md177}
+
+\begin{DoxyItemize}
+\item Behavior formerly enabled by U\+S\+E\+\_\+\+S\+F\+R\+\_\+\+F\+O\+R\+\_\+\+R\+EG is on by default now (no need to specify it, it isn\textquotesingle{}t a tested {\ttfamily \#ifdef} anymore). check here why\+: \href{https://gbdev.gg8.se/forums/viewtopic.php?id=697}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=697}}
+\end{DoxyItemize}\hypertarget{docs_migrating_versions_autotoc_md178}{}\doxysubsubsection{Porting to G\+B\+D\+K 2020 3.\+0.\+1}\label{docs_migrating_versions_autotoc_md178}
+
+\begin{DoxyItemize}
+\item L\+CC was upgraded to use S\+D\+CC v4.\+0. Makefile changes may be required
+\begin{DoxyItemize}
+\item The symbol format changed. To get bgb compatible symbols turn on {\ttfamily .noi} output (L\+CC argument\+: {\ttfamily -\/Wl-\/j} or {\ttfamily -\/debug}) and use {\ttfamily -\/Wm-\/yS}
+\item ?? Suggested\+: With L\+CC argument\+: {\ttfamily -\/Wa-\/l} (sdasgb\+:{\ttfamily -\/a All user symbols made global})
+\item In S\+D\+CC 3.\+6.\+0, the default for char changed from signed to unsigned.
+\begin{DoxyItemize}
+\item If you want the old behavior use {\ttfamily -\/-\/fsigned-\/char}.
+\item lcc includes {\ttfamily -\/-\/fsigned-\/char} by default
+\item Explicit declaration of unsigned vars is encouraged (for example, \textquotesingle{}15U\textquotesingle{} instead of \textquotesingle{}15\textquotesingle{})
+\end{DoxyItemize}
+\item {\ttfamily .init} address has been removed
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\DoxyHorRuler{0}
+\hypertarget{docs_migrating_versions_autotoc_md180}{}\doxysubsection{Historical G\+B\+D\+K versions}\label{docs_migrating_versions_autotoc_md180}
+\hypertarget{docs_migrating_versions_autotoc_md181}{}\doxysubsubsection{G\+B\+D\+K 1.\+1 to G\+B\+D\+K 2.\+0}\label{docs_migrating_versions_autotoc_md181}
+
+\begin{DoxyItemize}
+\item Change your int variables to long if they have to be bigger than 255. If they should only contain values between 0 and 255, use an unsigned int.
+\item If your application uses the delay function, you\textquotesingle{}ll have to adapt your delay values.
+\item Several functions have new names. In particular some of them have been changed to macros (e.\+g. show\+\_\+bkg() is now S\+H\+O\+W\+\_\+\+B\+KG).
+\item You will probably have to change the name of the header files that you include.
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/docs_releases.tex b/docs/latex/docs_releases.tex
new file mode 100644
index 00000000..6d93aa61
--- /dev/null
+++ b/docs/latex/docs_releases.tex
@@ -0,0 +1,506 @@
+The G\+B\+DK 2020 releases can be found on Github\+: \href{https://github.com/gbdk-2020/gbdk-2020/releases}{\texttt{ https\+://github.\+com/gbdk-\/2020/gbdk-\/2020/releases}}\hypertarget{docs_releases_autotoc_md182}{}\doxysubsection{G\+B\+D\+K 2020 Release Notes}\label{docs_releases_autotoc_md182}
+\hypertarget{docs_releases_autotoc_md183}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+6}\label{docs_releases_autotoc_md183}
+2022/xx
+\begin{DoxyItemize}
+\item Building G\+B\+DK
+\begin{DoxyItemize}
+\item Changed to target older version of mac\+OS (10.\+10) when building for better compatibility
+\end{DoxyItemize}
+\item Platforms
+\begin{DoxyItemize}
+\item Added support for Mega Duck / Cougar Boy ({\ttfamily duck}). See \mbox{\hyperlink{docs_supported_consoles}{Supported Consoles \& Cross Compiling}}
+\end{DoxyItemize}
+\item Library
+\begin{DoxyItemize}
+\item Added \mbox{\hyperlink{asm_2gbz80_2string_8h_a52701f453c97403ec1b12d286484259b}{memcmp()}}
+\item Added \mbox{\hyperlink{gb_8h_a970f18857533e062f4780f6e1c407d69}{add\+\_\+low\+\_\+priority\+\_\+\+T\+I\+M()}} function for timer interrupts which allow nesting for G\+B/\+C\+GB
+\item Added \mbox{\hyperlink{gb_8h_a811c386cac0df2d260aacb5a43608be5}{set\+\_\+bkg\+\_\+based\+\_\+tiles()}}, \mbox{\hyperlink{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap()}}, \mbox{\hyperlink{gb_8h_a739a212609ae60c9c56c095f96b4ea80}{set\+\_\+win\+\_\+based\+\_\+tiles()}}, \mbox{\hyperlink{gb_8h_a1b8a1026983cb2b2c0bd46334b4692a0}{set\+\_\+win\+\_\+based\+\_\+submap()}} for when a map\textquotesingle{}s tiles don\textquotesingle{}t start at V\+R\+AM index zero
+\item Added \mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock()}} for S\+M\+S/\+GG
+\item Added macro definitions for S\+D\+CC features\+:
+\begin{DoxyItemize}
+\item {\ttfamily \#define S\+FR \+\_\+\+\_\+sfr}
+\item {\ttfamily \#define \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{A\+T(\+A)}} \+\_\+\+\_\+at(\+A)}
+\end{DoxyItemize}
+\item Added check for O\+AM overflow to metasprite calls for G\+B/\+C\+GB
+\item Added constant definitions \mbox{\hyperlink{sms_2hardware_8h_a6777f1ed2475b5ba6aa60b9a16fa02d3}{P\+S\+G\+\_\+\+L\+A\+T\+CH}}, \mbox{\hyperlink{sms_2hardware_8h_ad8a903de6b38e08e1591fc5ef278381c}{P\+S\+G\+\_\+\+C\+H0}}, \mbox{\hyperlink{sms_2hardware_8h_addc12c4ee03ea787b826e337f1acd317}{P\+S\+G\+\_\+\+C\+H1}}, \mbox{\hyperlink{sms_2hardware_8h_aaeefb1ac1fb4d0d2324b8ee7f4953226}{P\+S\+G\+\_\+\+C\+H2}}, \mbox{\hyperlink{sms_2hardware_8h_ac760259fb86ee72abb5922018ae0db42}{P\+S\+G\+\_\+\+C\+H3}}, \mbox{\hyperlink{sms_2hardware_8h_a3d806ff027bffa67c4dfc5967f87c1d1}{P\+S\+G\+\_\+\+V\+O\+L\+U\+ME}} for S\+M\+S/\+GG
+\item Renamed {\ttfamily bgb\+\_\+emu.\+h} to {\ttfamily emu\+\_\+debug.\+h} and B\+G\+B\+\_\+$\ast$ functions to E\+M\+U\+\_\+$\ast$.
+\begin{DoxyItemize}
+\item Aliases for the B\+G\+B\+\_\+$\ast$ ones and a {\ttfamily bgb\+\_\+emu.\+h} shim are present for backward compatibility
+\end{DoxyItemize}
+\item Changed headers to wrap S\+D\+CC specific features (such as {\ttfamily N\+O\+N\+B\+A\+N\+K\+ED}) with {\ttfamily \#ifdef \+\_\+\+\_\+\+S\+D\+CC}
+\item Changed \mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand()}} and \mbox{\hyperlink{rand_8h_a67415330a1c7984e4537dac753306804}{arand()}} to return {\ttfamily uint8\+\_\+t} instead of {\ttfamily int8\+\_\+t} (closer to the standard)
+\item Fixed declaration for \mbox{\hyperlink{gb_2hardware_8h_a271367a0bf840e5422b3a7ed541776f8}{P\+C\+M\+\_\+\+S\+A\+M\+P\+LE}} and definition for \mbox{\hyperlink{gb_2hardware_8h_a2fe41a6e0abb211cc00a8fca90543966}{A\+U\+D3\+W\+A\+VE}}
+\item Fixed definition of {\ttfamily size\+\_\+t} to be {\ttfamily unsigned int} instead of {\ttfamily int}
+\item Fixed \mbox{\hyperlink{gb_8h_a36f9e5d95c2d7d58f203b5ac358e25e7}{vmemcpy()}} and \mbox{\hyperlink{asm_2gbz80_2string_8h_a802c986820d3866639922b6bc9484f90}{memmove()}} for S\+M\+S/\+GG
+\item Fixed random number generation for S\+M\+S/\+GG
+\item Fixed letter {\ttfamily U} appearing as {\ttfamily K} for min font
+\item Fixed define name in crash\+\_\+handler.\+h
+\item Exposed \mbox{\hyperlink{rand_8h_a7aab2f4a234108a5eae48e0d26380ae7}{\+\_\+\+\_\+rand\+\_\+seed}}
+\end{DoxyItemize}
+\item Toolchain / Utilities
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_utility_png2asset}{png2asset}}
+\begin{DoxyItemize}
+\item Added S\+M\+S/\+GG graphics format support
+\item Added 4bpp and S\+GB borders
+\item Added warning when image size is not an even multiple of tile size
+\item Added {\ttfamily -\/tile\+\_\+origin} offset option for when map tiles do not start at tile 0 in V\+R\+AM
+\item Added {\ttfamily $\ast$\+\_\+\+T\+I\+L\+E\+\_\+\+C\+O\+U\+NT} definition to output
+\item Fixed C\+GB {\ttfamily ...s\+\_\+map\+\_\+attributes} type definition in output
+\item Fixed values for {\ttfamily num\+\_\+palettes} in output
+\item Fixed incorrect {\ttfamily T\+I\+L\+E\+\_\+\+C\+O\+U\+NT} value when not {\ttfamily -\/using\+\_\+structs}
+\end{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}}
+\begin{DoxyItemize}
+\item Changed \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} flags to turn off Nintendo logo copy for G\+B/\+C\+GB (use version in crt instead)
+\item Fixed lcc handling of makebin {\ttfamily -\/x$\ast$} arguments
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item Examples
+\begin{DoxyItemize}
+\item Added logo example (cross-\/platform)
+\item Added \mbox{\hyperlink{isr_8h_a73769fed9338af86fdb7df35d7b82620}{I\+S\+R\+\_\+\+V\+E\+C\+T\+OR}} example of a raw I\+SR vector with no dispatcher for G\+B/\+C\+GB
+\item Changed sgb\+\_\+border example to use png2asset for graphics
+\item Changed use of \mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} in examples so it\textquotesingle{}s outside critical sections (since it disables/enables interrupts)
+\item Changed cross-\/platform auto-\/banks example to use .h header files
+\item Changed S\+GB border example to also work with S\+GB on P\+AL S\+N\+ES
+\end{DoxyItemize}
+\item Docs
+\begin{DoxyItemize}
+\item Added new section\+: Migrating From Pre-\/\+G\+B\+D\+K-\/2020 Tutorials
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md184}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+5}\label{docs_releases_autotoc_md184}
+2021/09
+\begin{DoxyItemize}
+\item Includes S\+D\+CC version 12539 with G\+B\+D\+K-\/2020 patches for Z80
+\item Known Issues
+\begin{DoxyItemize}
+\item S\+D\+CC\+: {\ttfamily z80instruction\+Size() failed to parse line node, assuming 999 bytes}
+\begin{DoxyItemize}
+\item This is a known issue with the S\+D\+CC Peephole Optimizer parsing and can be ignored.
+\end{DoxyItemize}
+\item {\ttfamily -\/bo$<$n$>$} and {\ttfamily -\/ba$<$n$>$} are not supported by the Windows build of \mbox{\hyperlink{docs_toolchain_sdcc}{sdcc}}
+\item On mac\+OS the cross platform {\ttfamily banks} example has problems parsing the filename based R\+OM and R\+AM bank assignments into {\ttfamily -\/bo$<$n$>$} and {\ttfamily -\/ba$<$n$>$}
+\end{DoxyItemize}
+\item Added support for new consoles. See \mbox{\hyperlink{docs_supported_consoles}{Supported Consoles \& Cross Compiling}}
+\begin{DoxyItemize}
+\item Analogue Pocket ({\ttfamily ap})
+\item Sega Master System ({\ttfamily sms}) and Game Gear ({\ttfamily gg})
+\end{DoxyItemize}
+\item Library
+\begin{DoxyItemize}
+\item Fixed error when calling get\+\_\+bkg\+\_\+tile\+\_\+xy\+: `?A\+Slink-\/\+Warning-\/\+Undefined Global '.set\+\_\+tile\+\_\+xy\textquotesingle{} referenced by module \`{} ?A\+Slink-\/\+Warning-\/\+Byte P\+CR relocation error for symbol .set\+\_\+tile\+\_\+xy
+\item Variables in static storage are now initialized to zero per C standard (but remaining W\+R\+AM is not cleared)
+\item Added many new register flag constants and names. For example\+:
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}{r\+L\+C\+DC}} is a new alias for \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}
+\item \mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}, \mbox{\hyperlink{gb_2hardware_8h_a582ece3b5f6cc49d47b2ad3e16d47374}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+O\+FF}}, \mbox{\hyperlink{gb_2hardware_8h_ae1de721c95ddc8f29ba9b9deaee8d68c}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+W\+I\+N\+ON}}
+\end{DoxyItemize}
+\item Added \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}, \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}, \mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}}
+\item Added \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}}, \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}, \mbox{\hyperlink{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}{I\+N\+C\+B\+I\+N\+\_\+\+S\+I\+Z\+E()}}, \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}}
+\item Added generic \mbox{\hyperlink{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M()}} and \mbox{\hyperlink{gb_8h_a6e40dcc763efd953181c7400642a9f69}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M()}}
+\item Added \mbox{\hyperlink{emu__debug_8h_a892ddea0cd396141c1ae05e384303cbf}{B\+G\+B\+\_\+printf()}} and updated emulator debug output.
+\item Added \mbox{\hyperlink{gb_8h_a68651e50243349b48164a8ad983dca4e}{set\+\_\+native\+\_\+tile\+\_\+data()}}, \mbox{\hyperlink{gb_8h_a55f82ff980398dd97036fd936ebd727e}{set\+\_\+tile\+\_\+map()}}, \mbox{\hyperlink{sms_8h_adcb394299a1033616fc7d2faec8bd6ad}{set\+\_\+1bpp\+\_\+colors}}, \mbox{\hyperlink{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_a2cc121fbeb5570248531b85a8f0b5b97}{set\+\_\+sprite\+\_\+1bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_aa224c9bac27c7fd268e62bdf33338a84}{set\+\_\+2bpp\+\_\+palette}}, \mbox{\hyperlink{sms_8h_aa7ba76e4d44dbf19da351fd1ea8e3023}{set\+\_\+bkg\+\_\+2bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_a10ee2919fcab7a5c482816ed718d1c4a}{set\+\_\+sprite\+\_\+2bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_ab752b1bb0f58da2a6d52e9747c4b3dd8}{set\+\_\+tile\+\_\+2bpp\+\_\+data}} (sms/gg only), \mbox{\hyperlink{sms_8h_aeff13dca11be49e8c159820c616016ec}{set\+\_\+bkg\+\_\+4bpp\+\_\+data}} (sms/gg only), \mbox{\hyperlink{sms_8h_a24f53cfe7e25c04fbb5dcb08cfb3b432}{set\+\_\+sprite\+\_\+4bpp\+\_\+data}} (sms/gg only)
+\item Added R\+LE decompression support\+: \mbox{\hyperlink{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}{rle\+\_\+init()}}, \mbox{\hyperlink{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}{rle\+\_\+decompress()}},
+\item Changed \mbox{\hyperlink{stdlib_8h_aac2ea595a9ea8f5ebd883a0bc05eba5c}{itoa()}}, \mbox{\hyperlink{stdlib_8h_a38c070016cb06132360cfa5bacc2ed19}{uitoa()}}, \mbox{\hyperlink{stdlib_8h_a6374e62474a5a76c7ace9a59fb1cc829}{ltoa()}}, \mbox{\hyperlink{stdlib_8h_ac22b79fe0c1279eabc3daf57328008d2}{ultoa()}} to now require a radix value (base) argument to be passed. On the Game Boy and Analogue Pocket the parameter is required but not utilized.
+\end{DoxyItemize}
+\item Examples
+\begin{DoxyItemize}
+\item Added cross-\/platform examples (build for multiple consoles\+: gb, ap, sms, gg)
+\item Added sms, gg, pocket(ap) examples
+\item Added incbin example
+\item Added simple physics sub-\/pixel / fixed point math example
+\item Added rle decompression example
+\item Changed windows make.\+bat files to compile.\+bat
+\item Bug fixes and updates for existing examples ~\newline
+
+\end{DoxyItemize}
+\item Toolchain / Utilities
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_utility_png2asset}{png2asset}}
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_utility_png2asset}{png2asset}} is the new name for the {\ttfamily png2mtspr} utility
+\item Added collision rectangle width and height ({\ttfamily -\/pw}, {\ttfamily -\/ph})
+\item Added option to use the palette from the source png ({\ttfamily -\/keep\+\_\+palette\+\_\+order})
+\item Added option to disable tile flip ({\ttfamily -\/noflip})
+\item Added export as map\+: tileset + bg ({\ttfamily -\/map})
+\item Added option to use C\+GB BG Map attributes ({\ttfamily -\/use\+\_\+map\+\_\+attributes})
+\item Added option to group the exported info into structs ({\ttfamily -\/use\+\_\+structs})
+\end{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}}
+\begin{DoxyItemize}
+\item Use {\ttfamily -\/m} to select target port and platform\+: \char`\"{}-\/m\mbox{[}port\mbox{]}\+:\mbox{[}plat\mbox{]}\char`\"{} ports\+:{\ttfamily gbz80,z80} plats\+:{\ttfamily ap,gb,sms,gg}
+\item Changed default output format when not specified from {\ttfamily .ihx} to {\ttfamily .gb} (or other active rom extension)
+\item Changed lcc to always use the linkerfile {\ttfamily -\/lkout=} option when calling bankpack
+\item Fixed name generation crash when outfile lacks extension
+\end{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_bankpack}{bankpack}}
+\begin{DoxyItemize}
+\item Added linkerfile input and output\+: {\ttfamily -\/lkin=$<$file$>$}, {\ttfamily -\/lkout=$<$file$>$}
+\item Added selector for platform specific behavior {\ttfamily plat=$<$plat$>$} (Default\+:gb, Avaialble\+:{\ttfamily gb,sms}). sms/gg targets prohibits packing {\ttfamily L\+I\+T\+\_\+N} areas in the same banks as {\ttfamily C\+O\+D\+E\+\_\+N} areas
+\item Added randomization for auto-\/banks ({\ttfamily -\/random}) for debugging and testing
+\end{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_utility_gbcompress}{utility\+\_\+gbcompress}}
+\begin{DoxyItemize}
+\item Added C source array format output (--cout) (optional variable name argument --varname=)
+\item Added C source array format input (--cin) (experimental)
+\item Added block style rle compression and decompression mode\+: {\ttfamily -\/-\/alg=rle}
+\item Fixed comrpession errors when input size was larger than 64k
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item Docs
+\begin{DoxyItemize}
+\item Added \mbox{\hyperlink{docs_supported_consoles}{Supported Consoles \& Cross Compiling}} section
+\item Various doc updates and improvements
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md185}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+4}\label{docs_releases_autotoc_md185}
+2021/06
+\begin{DoxyItemize}
+\item Library
+\begin{DoxyItemize}
+\item Support S\+D\+CC I\+N\+I\+T\+I\+A\+L\+I\+Z\+ER area (S\+D\+CC $\sim$12207+)
+\item Added \mbox{\hyperlink{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}{get\+\_\+vram\+\_\+byte()}} / \mbox{\hyperlink{gb_8h_a2e29fdca81c28c627c2591029722e71c}{get\+\_\+win\+\_\+tile\+\_\+xy()}} / \mbox{\hyperlink{gb_8h_a55c6581dbe9300dc6df41730f090af51}{get\+\_\+bkg\+\_\+tile\+\_\+xy()}}
+\item Added \mbox{\hyperlink{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}{set\+\_\+tile\+\_\+data()}}
+\item Fixed S\+GB detection
+\item Fixed broken \mbox{\hyperlink{gb_8h_a728b9440accedc5fb3477be3d150323a}{get\+\_\+tiles()}} / \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles()}}
+\item Fixed broken token handling in \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data()}} / \mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data()}} / \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data()}}
+\item Changed all headers to use standard {\ttfamily stdint.\+h} types (ex\+: {\ttfamily uint8\+\_\+t} instead of {\ttfamily U\+I\+N\+T8}/{\ttfamily U\+B\+Y\+TE})
+\item Made sample.\+h, cgb.\+h and sgb.\+h independent from gb.\+h
+\end{DoxyItemize}
+\item Examples
+\begin{DoxyItemize}
+\item Added project using a .lk linkerfile
+\item Changed all examples to use standard stdint.\+h types
+\item Moved banks\+\_\+farptr and banks\+\_\+new examples to \char`\"{}broken\char`\"{} due to S\+D\+CC changes
+\end{DoxyItemize}
+\item Toolchain / Utilities
+\begin{DoxyItemize}
+\item png2mtspr
+\begin{DoxyItemize}
+\item Added option to change default value for sprite property/attributes in (allows C\+GB palette, B\+G/\+W\+IN priority, etc).
+\item Improved\+: Turn off suppression of \char`\"{}blank\char`\"{} metasprite frames (composed of entirely transparent sprites)
+\item Fixed endless loop for png files taller than 255 pixels
+\end{DoxyItemize}
+\item bankpack
+\begin{DoxyItemize}
+\item Fixed -\/yt mbc specifier to also accept Decimal
+\item Improved\+: bank ID can be used in same file it is declared. Requires S\+D\+CC 12238+ with {\ttfamily -\/n} option to defer symbol resolution to link time.
+\end{DoxyItemize}
+\item gbcompress
+\begin{DoxyItemize}
+\item Added C source input (expirimental) and output
+\item Added size {\ttfamily \#defines}
+\end{DoxyItemize}
+\item lcc
+\begin{DoxyItemize}
+\item Added {\ttfamily -\/no-\/libs} and {\ttfamily -\/no-\/crt} options
+\item Added support for .lk linker files (useful when number of files on lcc command line exceeds max size on windows)
+\item Added support for converting .ihx to .gb
+\item Added rewrite .o files -\/$>$ .rel for linking when called with {\ttfamily -\/autobank} and {\ttfamily -\/Wb-\/ext=.rel}
+\item Workaround \mbox{\hyperlink{docs_toolchain_makebin}{makebin}} {\ttfamily -\/Wl-\/yp} formatting segfault
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item Docs
+\begin{DoxyItemize}
+\item Improved utility\+\_\+png2mtspr documentation
+\item Various doc updates and improvements
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md186}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+3}\label{docs_releases_autotoc_md186}
+2021/03
+\begin{DoxyItemize}
+\item Library
+\begin{DoxyItemize}
+\item Added \mbox{\hyperlink{gb_8h_a7080649e10765996c581e5b618e603b8}{set\+\_\+vram\+\_\+byte()}}
+\item Added \mbox{\hyperlink{sms_8h_adcd40a58f7c7d348d506cc400cd94739}{set\+\_\+bkg\+\_\+tile\+\_\+xy()}} / \mbox{\hyperlink{sms_8h_a95d929d964d9988f4dc5a25ed399ae08}{set\+\_\+win\+\_\+tile\+\_\+xy()}}
+\item Added \mbox{\hyperlink{gb_8h_a9005b80d3315f50f0fb0e1728e7ee60f}{get\+\_\+bkg\+\_\+xy\+\_\+addr()}} / \mbox{\hyperlink{sms_8h_a6eaafdbe6cf1695d30724ce75acb9412}{get\+\_\+win\+\_\+xy\+\_\+addr()}}
+\item Added \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap()}} / \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap()}}
+\item Added metasprite api support
+\item Added gb\+\_\+decompress support
+\item Added \mbox{\hyperlink{stdlib_8h_a62b7798461bd461da64c5f9d35feddf7}{calloc}} / \mbox{\hyperlink{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}{malloc}} / \mbox{\hyperlink{stdlib_8h_a1a6b5e8d2f1c37e5b43e4345586075be}{realloc}} / \mbox{\hyperlink{stdlib_8h_afbedc913aa4651b3c3b4b3aecd9b4711}{free}} and generic \mbox{\hyperlink{asm_2z80_2string_8h_a854ba725a4e429439ccf93b1f5ad7b3a}{memmove}}
+\item Improved \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}}\+: ignore \%0 padding and \%1-\/9 width specifier instead of not printing, support upper case X
+\item Fixed \mbox{\hyperlink{drawing_8h_afe0ad8959a2867c4b60829d065660f1b}{line()}}\+: handle drawing when x1 is less than x2
+\end{DoxyItemize}
+\item Examples
+\begin{DoxyItemize}
+\item Added large\+\_\+map\+: showing how to use \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap()}}
+\item Added scroller\+: showing use of \mbox{\hyperlink{gb_8h_a9005b80d3315f50f0fb0e1728e7ee60f}{get\+\_\+bkg\+\_\+xy\+\_\+addr()}}, \mbox{\hyperlink{sms_8h_adcd40a58f7c7d348d506cc400cd94739}{set\+\_\+bkg\+\_\+tile\+\_\+xy()}} and \mbox{\hyperlink{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}{set\+\_\+vram\+\_\+byte}}
+\item Added gbdecompress\+: de-\/compressing tile data into vram
+\item Added metasprites\+: show creating a large sprite with the new metasprite api
+\item Added template projects
+\item Fixed build issue with banks\+\_\+autobank example
+\item Improved sgb\+\_\+border
+\end{DoxyItemize}
+\item Toolchain / Utilities
+\begin{DoxyItemize}
+\item Added \mbox{\hyperlink{docs_toolchain_utility_gbcompress}{utility\+\_\+gbcompress}} utility
+\item Added utility\+\_\+png2mtspr metasprite utility
+\end{DoxyItemize}
+\item Docs
+\begin{DoxyItemize}
+\item Added extensive documentation (some of which is imported and updated from the old gbdk docs)
+\item Added P\+DF version of docs
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md187}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+2}\label{docs_releases_autotoc_md187}
+2021/01/17
+\begin{DoxyItemize}
+\item Includes S\+D\+CC snapshot build version 12016 (has a fix for duplicate debug symbols generated from inlined header functions which G\+B\+DK 4.\+0+ uses)
+\item Updated documentation
+\item Library was improved
+\begin{DoxyItemize}
+\item Linking with stdio.\+h does not require that much R\+OM now
+\item Default font is changed to the smaller one (102 characters), that leaves space for user tiles
+\item Fixed broken support for multiplying longs
+\item memset/memcpy minor enhancements
+\item safer copy-\/to-\/\+V\+R\+AM functions
+\item loading of 1bit data fixed, also now it is possible to specify pixel color
+\item Improved code generation for the G\+B\+DK Library with S\+D\+CC switch on by default\+: {\ttfamily -\/-\/max-\/allocs-\/per-\/node 50000}
+\item fixed wrong parameter offsets in \mbox{\hyperlink{gb_8h_a97b9f2fc6ac7cae97656aca940d65d44}{hiramcpy()}} (broken ram\+\_\+function example)
+\item Multiple minor improvements
+\end{DoxyItemize}
+\item New bankpack feature, allows automatic bank allocation for data and code, see banks\+\_\+autobank example, feature is in beta state, use with care
+\item Lcc improvements
+\begin{DoxyItemize}
+\item Fixed option to specify alternate base addresses for shadow\+\_\+\+O\+AM, etc
+\end{DoxyItemize}
+\item Examples\+: Added bgb debug example
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md188}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0.\+1}\label{docs_releases_autotoc_md188}
+2020/11/14
+\begin{DoxyItemize}
+\item Updated A\+PI documentation
+\item I\+HX is checked for correctness before the makebin stage. That allows to warn about overwriting the same R\+OM addresses (S\+D\+CC toolchain does not check this anymore).
+\item Library was improved
+\begin{DoxyItemize}
+\item set\+\_\+$\ast$\+\_\+tiles() now wrap maps around horizontal and vertical boundaries correctly
+\item new fill\+\_\+$\ast$\+\_\+rect() functions to clear rectangle areas
+\item runtime initialization code now does not initialize whole W\+R\+AM with zeros anymore, that allows B\+GB to raise exceptions when code tries to read W\+R\+AM that was not written before.
+\item enhanced S\+GB support
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}{joypad\+\_\+init()}} / \mbox{\hyperlink{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}{joypad\+\_\+ex()}} support for multiple joypads
+\item S\+GB border example
+\end{DoxyItemize}
+\item \+\_\+current\+\_\+bank variable is updated when using bank switching macros
+\item Reorganized examples\+: each example is in separate folder now, that simplifies understanding.
+\item Lcc improvements
+\begin{DoxyItemize}
+\item Fix -\/S flag
+\item Fix default stack location from 0x\+D\+E\+FF to 0x\+E000 (end of W\+R\+A\+M1)
+\item Fix cleanup of .adb files with -\/Wf--debug flag
+\item Fix output not working if target is -\/o some\+\_\+filename.\+ihx
+\end{DoxyItemize}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md189}{}\doxysubsubsection{G\+B\+D\+K 2020 4.\+0}\label{docs_releases_autotoc_md189}
+2020/10/01
+\begin{DoxyItemize}
+\item G\+B\+DK now requires S\+D\+CC 4.\+0.\+3 or higher, that has fully working toolchain. Old link-\/gbz80 linker is not used anymore, sdldgb and makebin are used to link objects and produce binary roms; maccer tool is no longer needed either
+\begin{DoxyItemize}
+\item S\+D\+CC 4.\+0.\+3 has much better code generator which produces smaller and faster code. Code is twice faster
+\item S\+O\+U\+R\+CE L\+E\+V\+EL D\+E\+B\+U\+G\+G\+I\+NG is possible now! Native toolchain produces $\ast$.C\+DB files that contain detailed debug info. Look for E\+M\+U\+L\+I\+C\+I\+O\+US extension for vs.\+code. It supports breakpoints, watches, inspection of local variables, and more!
+\item S\+D\+CC 4.\+0.\+4 has fixed R\+G\+B\+DS support; library is not updated to support that in full yet, but it is possible to assemble and link code emitted by S\+D\+CC with R\+G\+D\+BS
+\item New banked trampolines are used, they are faster and smaller
+\item New (old) initialization for non-\/constant arrays do N\+OT require 5 times larger rom space than initialized array itself, S\+D\+CC even tries to compress the data
+\end{DoxyItemize}
+\item Library was improved
+\begin{DoxyItemize}
+\item itoa/ltoa functions were rewritten, div/mod is not required now which is about 10 times faster
+\item sprite functions are inline now, which is faster up to 12 times and produces the same or smaller code; .O\+AM symbol is renamed into \+\_\+shadow\+\_\+\+O\+AM that allows accessing shadow O\+AM directly from C code
+\item interrupt handling was revised, it is now possible to make dedicated I\+SR\textquotesingle{}s, that is important for time-\/sensitive handlers such as H\+Blank.
+\item printf/sprintf were rewritten and splitted, print functions are twice faster now and also requre less rom space if you use \mbox{\hyperlink{stdio_8h_a31913a297ee18548c81d482ef6bdbe0f}{sprintf()}} only, say, in bgb\+\_\+emu.\+h
+\item crash\+\_\+handler.\+h -\/ crash handler that allows to detect problems with R\+O\+Ms after they are being released (adapted handler, originally written by I\+S\+S\+Otm)
+\item improved and fixed string.\+h
+\item many other improvements and fixes -\/ thanks to all contributors!
+\end{DoxyItemize}
+\item Revised examples
+\item Improved linux support
+\item Lcc has been updated
+\begin{DoxyItemize}
+\item it works with the latest version of sdcc
+\item quoted paths with spaces are working now
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md190}{}\doxysubsubsection{G\+B\+D\+K 2020 3.\+2}\label{docs_releases_autotoc_md190}
+2020/06/05
+\begin{DoxyItemize}
+\item Fixed O\+AM initialization that was causing a bad access to V\+R\+AM
+\item Interrupt handlers now wait for lcd controller mode 0 or 1 by default to prevent access to inaccessible V\+R\+AM in several functions (like set\+\_\+bkg\+\_\+tiles)
+\item Several optimizations here and there
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md191}{}\doxysubsubsection{G\+B\+D\+K 2020 3.\+1.\+1}\label{docs_releases_autotoc_md191}
+2020/05/17
+\begin{DoxyItemize}
+\item Fixed issues with libgcc\+\_\+s\+\_\+dw2-\/1.\+dll
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md192}{}\doxysubsubsection{G\+B\+D\+K 2020 3.\+1}\label{docs_releases_autotoc_md192}
+2020/05/16
+\begin{DoxyItemize}
+\item Banked functions are working! The patcher is fully integrated in link-\/gbz80, no extra tools are needed. It is based on Toxa\textquotesingle{}s work
+\begin{DoxyItemize}
+\item Check this post for more info
+\item Check the examples/gb/banked code for basic usage
+\end{DoxyItemize}
+\item Behavior formerly enabled by U\+S\+E\+\_\+\+S\+F\+R\+\_\+\+F\+O\+R\+\_\+\+R\+EG is on by default now (no need to specify it, it isn\textquotesingle{}t a tested {\ttfamily \#ifdef} anymore). check here why\+: \href{https://gbdev.gg8.se/forums/viewtopic.php?id=697}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=697}}
+\item Fixed examples that were not compiling in the previous version and some improvements in a few of them. Removed all warnings caused by changing to the new S\+D\+CC
+\item Fixed bug in lcc that was causing some files in the temp folder not being deleted
+\item Removed as-\/gbz80 (the lib is now compiled with sdasgb thanks to this workaround) \href{https://github.com/gbdk-2020/gbdk-2020/commit/d2caafa4a66eb08998a14b258cb66af041a0e5c8}{\texttt{ https\+://github.\+com/gbdk-\/2020/gbdk-\/2020/commit/d2caafa4a66eb08998a14b258cb66af041a0e5c8}}
+\item Profile support with bgb emulator
+\begin{DoxyItemize}
+\item Basic support including $<$gb/bgb\+\_\+emu.\+h$>$ and using the macros B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN and B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND. More info in this post \href{https://gbdev.gg8.se/forums/viewtopic.php?id=703}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=703}}
+\item For full profiling check this repo and this post \href{https://github.com/untoxa/bgb_profiling_toolkit/blob/master/readme.md}{\texttt{ https\+://github.\+com/untoxa/bgb\+\_\+profiling\+\_\+toolkit/blob/master/readme.\+md}} \href{https://gbdev.gg8.se/forums/viewtopic.php?id=710}{\texttt{ https\+://gbdev.\+gg8.\+se/forums/viewtopic.\+php?id=710}}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md193}{}\doxysubsubsection{G\+B\+D\+K 2020 3.\+0.\+1}\label{docs_releases_autotoc_md193}
+2020/04/12
+\begin{DoxyItemize}
+\item Updated S\+D\+CC to v.\+4.\+0
+\item Updated L\+CC to work with the new compiler
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md194}{}\doxysubsubsection{G\+B\+D\+K 2020 3.\+0}\label{docs_releases_autotoc_md194}
+2020/04/12
+\begin{DoxyItemize}
+\item Initial G\+B\+DK 2020 release ~\newline
+ Updated S\+D\+CC to v4.\+0 The new linker is not working so the old version is still there There is an issue with sdagb compiling drawing.\+s (the JP in line 32 after \char`\"{}.\+org .\+M\+O\+D\+E\+\_\+\+T\+A\+B\+L\+E+4$\ast$.\+G\+\_\+\+M\+O\+D\+E\char`\"{} it\textquotesingle{}s writing more than 4 bytes invading some addresses required by input.\+s\+:41) Because of this, all .s files in libc have been assembled with the old as-\/gbz80 and that\textquotesingle{}s why it is still included
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md195}{}\doxysubsection{Historical G\+B\+D\+K Release Notes}\label{docs_releases_autotoc_md195}
+\hypertarget{docs_releases_autotoc_md196}{}\doxysubsubsection{G\+B\+D\+K 2.\+96}\label{docs_releases_autotoc_md196}
+17 April, 2000 ~\newline
+ Many changes. ~\newline
+
+\begin{DoxyItemize}
+\item Code generated is now much more reliable and passes all of sdcc\textquotesingle{}s regression suite.
+\item Added support for large sets of local variables ($>$127 bytes).
+\item Added full 32 bit long support.
+\item Still no floating pt support.
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md197}{}\doxysubsubsection{G\+B\+D\+K 2.\+95-\/3}\label{docs_releases_autotoc_md197}
+19th August, 2000 ~\newline
+
+
+
+\begin{DoxyItemize}
+\item Stopped lcc with sdcc from leaking .cdb files all across /tmp.
+\item Optimised $<$ and $>$ for 16 bit varibles.
+\item Added a new lexer to sdcc. Compiling files with large initalised arrays takes 31\% of the time (well, at least samptest.\+c does \+:) ~\newline
+
+\end{DoxyItemize}
+
+This is an experimental release for those who feel keen. The main change is a new lexer (the first part in the compilation process which recognises words and symbols like \textquotesingle{}!=\textquotesingle{} and \textquotesingle{}char\textquotesingle{} and turns them into a token number) which speeds up compilation of large initialised arrays like tile data by a factor of three. Please report any bugs that show up -\/ this is a big change.
+
+I have also included a \textquotesingle{}minimal\textquotesingle{} release for win32 users which omits the documentation, library sources, and examples. If this is useful I will keep doing it.\hypertarget{docs_releases_autotoc_md198}{}\doxysubsubsection{G\+B\+D\+K 2.\+95-\/2}\label{docs_releases_autotoc_md198}
+5th August, 2000 ~\newline
+ Just a small update. From the R\+E\+A\+D\+ME\+:
+
+
+\begin{DoxyItemize}
+\item Added model switching support --model-\/medium uses near (16 bit) pointers for data, and banked calls for anything not declared as \textquotesingle{}nonbanked\textquotesingle{} --model-\/small uses near (16 bit) pointers for data and calls. Nothing uses banked calls. \textquotesingle{}nonbanked\textquotesingle{} functions are still placed in H\+O\+ME. Libraries are under lib/medium and lib/small.
+\item Added the gbdk version to \textquotesingle{}sdcc --version\textquotesingle{}
+\item Changed the ways globals are exported, reducing the amount of extra junk linked in.
+\item Turned on the optimisations in flex. Large constant arrays like tile data should compile a bit faster.
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md199}{}\doxysubsubsection{G\+B\+D\+K 2.\+95}\label{docs_releases_autotoc_md199}
+22nd July, 2000
+\begin{DoxyItemize}
+\item Fixed \textquotesingle{}a $<$$<$ c\textquotesingle{} for c = \mbox{[}9..15\mbox{]}
+\item no\$gmb doesn\textquotesingle{}t support labels of $>$ 32 chars. The linker now trims all labels to 31 chars long.
+\item Fixed wait\+\_\+vbl for the case where you miss a vbl
+\item Fixed + and -\/ for any type where sizeof == 2 and one of the terms was on the stack. This includes pointers and ints. Fixes the text output bug in the examples. Should be faster now as well. Note that + and -\/ for longs is still broken.
+\item Fixed the missing $\ast$/ in gb.\+h
+\item Added basic far function support. Currently only works for isas and rgbasm. See examples/gb/far/$\ast$
+\item bc is now only pushed if the function uses it. i.\+e. something like\+: int silly(int i) \{ return i; \} ~\newline
+ will not have the push bc; pop bc around it.
+\item Better rgbasm support. Basically\+: o Use \char`\"{}sdcc -\/mgbz80 -\/-\/asm=rgbds file.\+c\char`\"{} for each file.\+c o Use \char`\"{}sdcc -\/mgbz80 -\/-\/asm=rgbds crt0.\+o gbz80.\+lib gb.\+lib file1.\+o file2.\+o...\char`\"{}
+\end{DoxyItemize}
+
+to link everything together. The .lib files are generated using astorgb.\+pl and sdcc to turn the gbdk libraries into something rgbds compatible. The libraries are {\itshape not} fully tested. Trust nothing. But give it a go \+:)
+\begin{DoxyItemize}
+\item Ran a spell checker across the R\+E\+A\+D\+ME and Change\+Log ~\newline
+
+\end{DoxyItemize}
+
+This is a recommended upgrade. Some of the big features are\+:
+
+Decent rgbds support. All the libraries and most of the examples can now compile with rgbds as the assembler. Banked function support. It is now easier to break the 32k barrier from within C. Functions can live in and be called transparently from any bank. Only works with rgbds Fixed some decent bugs with R\+SH, L\+SH, and a nasty bug with + and -\/ for int\textquotesingle{}s and pointers. Various optimisations in the code generator.
+
+7th July, 2000 ~\newline
+ Information on float and long support. Someone asked about the state of float/long support recently. Heres my reply\+:
+
+long support is partly there, as is float support. The compiler will correctly recognise the long and float keywords, and will generate the code for most basic ops (+, -\/, \&, $\vert$ etc) for longs correctly and will generate the function calls for floats and hard long operations ($\ast$, /, \%) correctly. However it wont generate float constants in the correct format, nor will it \textquotesingle{}return\textquotesingle{} a long or float -\/ gbdk doesn\textquotesingle{}t yet support returning types of 4 bytes. Unfortunately its not going to make it into 2.\+95 as there\textquotesingle{}s too much else to do, but I should be able to complete long support for 2.\+96\hypertarget{docs_releases_autotoc_md200}{}\doxysubsubsection{G\+B\+D\+K 2.\+94}\label{docs_releases_autotoc_md200}
+7th May, 2000 ~\newline
+ Many fixes -\/ see the R\+E\+A\+D\+ME for more.
+
+7th May -\/ Library documentation up. A good size part of the libraries that go with gbdk have been documented -\/ follow the H\+T\+ML link above to have a look. Thanks to quang for a good chunk of the gb.\+h documentation. Please report any errors \+:)
+\begin{DoxyItemize}
+\item Fixed \#define B\+L\+AH 7 // Unterminated \textquotesingle{} error in sdcpp
+\begin{DoxyItemize}
+\item Fixed S\+C\+Y\+\_\+\+R\+EG += 2, S\+C\+Y\+\_\+\+R\+EG -\/= 5 (add and subtract in indirect space) as they were both quite broken.
+\item externs and static\textquotesingle{}s now work as expected.
+\item You can now specify which bank code should be put into using a \#pragma e.\+g\+: \#pragma bank=H\+O\+ME Under rgbds and asxxxx putting code in the H\+O\+ME bank will force the code into bank 0 -\/ useful for library functions. The most recent \#pragma bank= will be the one used for the whole file.
+\item Fixed an interesting bug in the caching of lit addresses
+\item Added support for accessing high registers directly using the \textquotesingle{}sfr\textquotesingle{} directive. See libc/gb/sfr.\+s and gb/hardware.\+h for an example. It should be possible with a bit of work to make high ram directly usable by the compiler; at the moment it is experimental. You can test sfr\textquotesingle{}s by enabling U\+S\+E\+\_\+\+S\+F\+R\+\_\+\+F\+O\+R\+\_\+\+R\+EG=1
+\item Added remove\+\_\+\+V\+BL etc functions.
+\item Documented the libs -\/ see the gbdk-\/doc tarball distributed seperatly.
+\item Two dimensional arrays seem to be broken.
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md201}{}\doxysubsubsection{G\+B\+D\+K 2.\+93}\label{docs_releases_autotoc_md201}
+6th April, 2000 ~\newline
+ From the R\+E\+A\+D\+ME
+
+
+\begin{DoxyItemize}
+\item Added multi-\/bank support into the compiler -\/ The old -\/Wf-\/boxx and -\/Wf-\/baxx options now work
+\item Has preliminary support for generating rgbds and I\+S\+AS compatible assembler. Try -\/W--asm=rgbds or -\/W--asm=isas. The I\+S\+AS code is untested as I dont have access to the real assembler.
+\item R\+SH is fixed
+\item A\+ND is fixed
+\item The missing parts of 2.\+1.\+0\textquotesingle{}s libs are there. Note\+: They are untested.
+\item The dscan demo now fully works (with a hack \+:)
+\item There is a bug with cached computed values which are later used as pointers. When the value is first used as a B\+Y\+TE arg, then later as a pointer the pointer fails as the high byte was never computed and is now missing. A temporary fix is to declare something appropriate as \textquotesingle{}volatile\textquotesingle{} to stop the value being cached. See dscan.\+c/bombs() for an example.
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md202}{}\doxysubsubsection{G\+B\+D\+K 2.\+92-\/2 for win32}\label{docs_releases_autotoc_md202}
+26th March, 2000 ~\newline
+ This is a maintenance release for win32 which fixes some of the niggly install problems, especially\+:
+\begin{DoxyItemize}
+\item win32 only. Takes care of some of the install bugs, including\+:
+\begin{DoxyItemize}
+\item Now auto detects where it is installed. This can be overridden using set G\+B\+D\+K\+D\+IR=...
+\item Problems with the installer (now uses Win\+Zip)
+\item Problems with the temp directory Now scans T\+MP, T\+E\+MP, T\+M\+P\+D\+IR and finally c\+: tmp
+\item cygwin1.\+dll and \textquotesingle{}make\textquotesingle{} are no longer required gbdk is now built using mingw32 which is win32 native make.\+bat is automagically generated from the Makefile
+\item I\textquotesingle{}ve reverted to using W\+O\+RD for signed 16 bit etc. G\+B\+D\+K\+\_\+2\+\_\+\+C\+O\+M\+P\+AT is no longer required.
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+W\+O\+R\+DS are now back to signed. G\+B\+D\+K\+\_\+2\+\_\+\+C\+O\+M\+P\+AT is no longer needed. Temporary files are created in T\+MP, T\+E\+MP, or T\+M\+P\+D\+IR instead of c\+: tmp The installer is no more as it\textquotesingle{}s not needed. There is a Win\+Zip wrapped version for those with the extra bandwidth \+:). gbdk autodetects where it is installed -\/ no more environment variables. cygwin1.\+dll and make are no longer required -\/ gbdk is now compiled with mingw32.
+
+See the Change\+Log section in the R\+E\+A\+D\+ME for more information.
+
+21st March, 2000 ~\newline
+ Problems with the installer. It seems that the demo of Install\+V\+I\+SE has an unreasonably short time limit. I had planed to use the demo until the license key came through, but there\textquotesingle{}s no sign of the key yet and the 3 day evaluation is up. If anyone knows of a free Windows installer with the ability to modify environment variables, please contact me. I hear that temporarily setting you clock back to the 15th works...
+
+18th March, 2000 ~\newline
+ libc5 version available / \char`\"{}\+Error creating temp file\char`\"{} Thanks to Rodrigo Couto there is now a Linux/libc5 version of gbdk3-\/2.\+92 available -\/ follow the download link above. At least it will be there when the main sourceforge site comes back up... Also some people have reported a bug where the compiler reports \textquotesingle{}$\ast$$\ast$$\ast$ Error creating temp file\textquotesingle{}. Try typing \char`\"{}mkdir c\+: tmp\char`\"{} from a D\+OS prompt and see if that helps.\hypertarget{docs_releases_autotoc_md203}{}\doxysubsubsection{G\+B\+D\+K 2.\+92}\label{docs_releases_autotoc_md203}
+8th March, 2000 ~\newline
+ Better than 2.\+91 \+:). Can now be installed anywhere. All the demos work. See the R\+E\+A\+D\+ME for more.
+\begin{DoxyItemize}
+\item All the examples now work (with a little bit of patching \+:)
+\begin{DoxyItemize}
+\item Fixed problem with registers being cached instead of being marked volatile.
+\item More register packing -\/ should be a bit faster.
+\item You can now install somewhere except c\+: gbdk $\vert$ /usr/lib/gbdk
+\item Arrays initialised with constant addresses a\textquotesingle{}la galaxy.\+c now work.
+\item Fixed minor bug with 104\$\+: labels in as.
+\item Up to 167d/s... ~\newline
+
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_releases_autotoc_md204}{}\doxysubsubsection{G\+B\+D\+K 2.\+91}\label{docs_releases_autotoc_md204}
+27th Feb, 2000 ~\newline
+ Better than 2.\+90 and includes Linux, win32 and a source tar ball. Some notes\+:
+
+Read the R\+E\+A\+D\+ME first Linux users need libgc-\/4 or above. Debian users try apt-\/get install libgc5. All the types have changed. Again, please read the R\+E\+A\+D\+ME first. I prefer release early, release often. The idea is to get the bugs out there so that they can be squashed quickly. I\textquotesingle{}ve split up the libs so that they can be used on other platforms and so that the libs can be updated without updating the compiler. One side effect is that gb specific files have been shifted into their own directory i.\+e. gb.\+h is now gb/gb.\+h.
+
+23rd Feb, 2000 ~\newline
+ First release of gbdk/sdcc. This is an early release -\/ the only binary is for Linux and the source is only available through cvs. If your interested in the source, have a look at the cvs repository gbdk-\/support first, which will download all the rest of the code. Alternatively, look at gbdk-\/support and gbdk-\/lib at cvs.\+gbdk.\+sourceforge.\+net and sdcc at cvs.\+sdcc.\+sourceforge.\+net. I will be working on binaries for Win32 and a source tar ball soon. Please report any bugs through the bugs link above.
+
+31st Jan, 2000 ~\newline
+ Added Dermot\textquotesingle{}s far pointer spec. It\textquotesingle{}s mainly here for comment. If sdcc is ported to the Gameboy then I will be looking for some way to do far calls.
+
+8th Jan, 2000 ~\newline
+ Moved over to sourceforge.\+net. Thanks must go to David Pfeffer for gbdk\textquotesingle{}s previous resting place, www.\+gbdev.\+org. The transition is not complete, but cvs and web have been shifted. Note that the cvs download instructions are stale -\/ you should now look to cvs.\+gbdk.\+sourceforge.\+net. I am currently working on porting sdcc over to the Z80. David Nathan is looking at porting it to the GB.
+
+6th Jan, 2000 ~\newline
+ Icehawk wrote \char`\"{}\+I did write some rumble pack routines. Just make sure to remind people to add -\/\+Wl-\/yt0x1\+C or -\/\+Wl-\/yt0x1\+D or -\/\+Wl-\/yt0x1\+E depending on sram and battery usage. Find the routines on my site (as usual). =)\char`\"{}
+
+18th Oct, 1999 ~\newline
+ Bug tracking / F\+AQ up. Try the link on the left to report any bugs with G\+B\+DK. It\textquotesingle{}s also the first place to look if your having problems.\hypertarget{docs_releases_autotoc_md205}{}\doxysubsubsection{G\+B\+D\+K 2.\+1.\+5}\label{docs_releases_autotoc_md205}
+17th Oct, 1999 ~\newline
+
+
+The compiler is the same, but some of the libraries have been improved. \mbox{\hyperlink{asm_2gbz80_2string_8h_a4bc4146b1a053fc4ec10f1377bb21a4f}{memset()}} and \mbox{\hyperlink{asm_2gbz80_2string_8h_a6a1a6cbe7fb6102819098340a4986574}{memcpy()}} are much faster, \mbox{\hyperlink{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}{malloc()}} is fixed, and a high speed fixed block alternative \mbox{\hyperlink{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}{malloc()}} was added.
\ No newline at end of file
diff --git a/docs/latex/docs_rombanking_mbcs.tex b/docs/latex/docs_rombanking_mbcs.tex
new file mode 100644
index 00000000..b8898a23
--- /dev/null
+++ b/docs/latex/docs_rombanking_mbcs.tex
@@ -0,0 +1,258 @@
+\hypertarget{docs_rombanking_mbcs_autotoc_md73}{}\doxysubsection{R\+O\+M/\+R\+A\+M Banking and M\+B\+Cs (\+Memory Bank Controllers)}\label{docs_rombanking_mbcs_autotoc_md73}
+The standard Game Boy cartridge with no M\+BC has a fixed 32K bytes of R\+OM. In order to make cartridges with larger R\+OM sizes (to store more code and graphics) M\+B\+Cs can be used. They allow switching between multiple R\+OM banks that use the same memory region. Only one of the banks can be selected as active at a given time, while all the other banks are inactive (and so, inaccessible).\hypertarget{docs_rombanking_mbcs_autotoc_md74}{}\doxysubsubsection{Non-\/banked cartridges}\label{docs_rombanking_mbcs_autotoc_md74}
+Cartridges with no M\+BC controller are non-\/banked, they have 32K bytes of fixed R\+OM space and no switchable banks. For these cartridges the R\+OM space between {\ttfamily 0000h and 7F\+F\+Fh} can be treated as a single large bank of 32K bytes, or as two contiguous banks of 16K bytes in Bank 0 at {\ttfamily 0000h -\/ 3F\+F\+Fh} and Bank 1 at {\ttfamily 4000h to 7F\+F\+Fh}.\hypertarget{docs_rombanking_mbcs_autotoc_md75}{}\doxysubsubsection{M\+B\+C Banked cartridges (\+Memory Bank Controllers)}\label{docs_rombanking_mbcs_autotoc_md75}
+\label{docs_rombanking_mbcs_MBC}%
+\Hypertarget{docs_rombanking_mbcs_MBC}%
+\label{docs_rombanking_mbcs_MBCS}%
+\Hypertarget{docs_rombanking_mbcs_MBCS}%
+Cartridges with M\+B\+Cs allow the the Game Boy to work with R\+O\+MS up to 8MB in size and with R\+AM up to 128kB. Each bank is 16K Bytes.
+\begin{DoxyItemize}
+\item Bank 0 of the R\+OM is located in the region at {\ttfamily 0000h -\/ 3F\+F\+Fh}. It is {\itshape usually} fixed (non-\/banked) and cannot be switched out for another bank.
+\item The higher region at {\ttfamily 4000h to 7F\+F\+Fh} is used for switching between different R\+OM banks.
+\end{DoxyItemize}
+
+See the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}} for more details about the individual M\+B\+Cs and their capabilities.\hypertarget{docs_rombanking_mbcs_autotoc_md76}{}\doxysubsection{Working with Banks}\label{docs_rombanking_mbcs_autotoc_md76}
+To assign code and constant data (such as graphics) to a R\+OM bank and use it\+:
+\begin{DoxyItemize}
+\item Place the code for your R\+OM bank in one or several source files.
+\item Specify the R\+OM bank to use, either in the source file or at compile/link time.
+\item Specify the number of banks and M\+BC type during link time.
+\item When the program is running and wants to use data or call a function that is in a given bank, manually or automatically set the desired bank to active.
+\end{DoxyItemize}\hypertarget{docs_rombanking_mbcs_autotoc_md77}{}\doxysubsubsection{Setting the R\+O\+M bank for a Source file}\label{docs_rombanking_mbcs_autotoc_md77}
+The R\+OM and R\+AM bank for a source file can be set in a couple different ways. Multiple different banks cannot be assigned inside the same source file (unless the {\ttfamily \+\_\+\+\_\+addressmod} method is used), but multiple source files can share the same bank.
+
+If no R\+OM and R\+AM bank are speciied for a file then the default \+\_\+\+C\+O\+DE, \+\_\+\+B\+SS and \+\_\+\+D\+A\+TA segments are used.
+
+Ways to set the R\+OM bank for a Source file
+\begin{DoxyItemize}
+\item {\ttfamily \#pragma bank $<$N$>$} at the start of a source file. Example (R\+OM bank 2)\+: {\ttfamily \#pragma bank 2}
+\item The lcc switch for R\+OM bank {\ttfamily -\/Wf-\/bo$<$N$>$}. Example (R\+OM bank 2)\+: {\ttfamily -\/Wf-\/bo2}
+\item Using \mbox{\hyperlink{docs_rombanking_mbcs_rom_autobanking}{rom\+\_\+autobanking}}
+\end{DoxyItemize}
+
+Note\+: You can use the {\ttfamily N\+O\+N\+B\+A\+N\+K\+ED} keyword to define a function as non-\/banked if it resides in a source file which has been assigned a bank.\hypertarget{docs_rombanking_mbcs_autotoc_md78}{}\doxysubsubsection{Setting the R\+A\+M bank for a Source file}\label{docs_rombanking_mbcs_autotoc_md78}
+
+\begin{DoxyItemize}
+\item Using the lcc switch for R\+AM bank {\ttfamily -\/Wf-\/ba$<$N$>$}. Example (R\+OM bank 3)\+: {\ttfamily -\/Wf-\/bo3}
+\end{DoxyItemize}
+
+\label{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}%
+\Hypertarget{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}%
+\hypertarget{docs_rombanking_mbcs_autotoc_md79}{}\doxysubsubsection{Setting the M\+B\+C and number of R\+O\+M \& R\+A\+M banks available}\label{docs_rombanking_mbcs_autotoc_md79}
+At the link stage this is done with \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using pass-\/through switches for \mbox{\hyperlink{docs_toolchain_makebin}{makebin}}.
+\begin{DoxyItemize}
+\item {\ttfamily -\/Wl-\/yo$<$N$>$} where {\ttfamily $<$N$>$} is the number of R\+OM banks. 2, 4, 8, 16, 32, 64, 128, 256, 512
+\begin{DoxyItemize}
+\item {\ttfamily -\/Wl-\/yoA} may be used for automatic bank size.
+\end{DoxyItemize}
+\item {\ttfamily -\/Wl-\/ya$<$N$>$} where {\ttfamily $<$N$>$} is the number of R\+AM banks. 2, 4, 8, 16, 32
+\item {\ttfamily -\/Wl-\/yt$<$N$>$} where {\ttfamily $<$N$>$} is the type of M\+BC cartridge (see below).
+\begin{DoxyItemize}
+\item Example\+: {\ttfamily Wl-\/yt0x1A}
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+The M\+BC settings below are available when using the makebin M\+BC switch.
+
+Additional details available at \href{https://gbdev.io/pandocs/The_Cartridge_Header.html\#0147---cartridge-type}{\texttt{ Pandocs}}
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\# From Makebin source:}
+\DoxyCodeLine{\#}
+\DoxyCodeLine{\#-\/Wl-\/yt where is one of the numbers below}
+\DoxyCodeLine{\#}
+\DoxyCodeLine{\# 0147: Cartridge type:}
+\DoxyCodeLine{\# 0-\/ROM ONLY 12-\/ROM+MBC3+RAM}
+\DoxyCodeLine{\# 1-\/ROM+MBC1 13-\/ROM+MBC3+RAM+BATT}
+\DoxyCodeLine{\# 2-\/ROM+MBC1+RAM 19-\/ROM+MBC5}
+\DoxyCodeLine{\# 3-\/ROM+MBC1+RAM+BATT 1A-\/ROM+MBC5+RAM}
+\DoxyCodeLine{\# 5-\/ROM+MBC2 1B-\/ROM+MBC5+RAM+BATT}
+\DoxyCodeLine{\# 6-\/ROM+MBC2+BATTERY 1C-\/ROM+MBC5+RUMBLE}
+\DoxyCodeLine{\# 8-\/ROM+RAM 1D-\/ROM+MBC5+RUMBLE+SRAM}
+\DoxyCodeLine{\# 9-\/ROM+RAM+BATTERY 1E-\/ROM+MBC5+RUMBLE+SRAM+BATT}
+\DoxyCodeLine{\# B-\/ROM+MMM01 1F-\/Pocket Camera}
+\DoxyCodeLine{\# C-\/ROM+MMM01+SRAM FD-\/Bandai TAMA5}
+\DoxyCodeLine{\# D-\/ROM+MMM01+SRAM+BATT FE -\/ Hudson HuC-\/3}
+\DoxyCodeLine{\# F-\/ROM+MBC3+TIMER+BATT FF -\/ Hudson HuC-\/1}
+\DoxyCodeLine{\# 10-\/ROM+MBC3+TIMER+RAM+BATT}
+\DoxyCodeLine{\# 11-\/ROM+MBC3}
+\end{DoxyCode}
+\hypertarget{docs_rombanking_mbcs_autotoc_md80}{}\doxysubsubsection{Getting Bank Numbers}\label{docs_rombanking_mbcs_autotoc_md80}
+The bank number for a banked function, variable or source file can be stored and retrieved using the following macros\+:
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}\+: Create a reference for retrieving the bank number of a variable or function
+\item \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}\+: Retrieve a bank number using a reference created with \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}
+\item \mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}} -\/ Make a \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}} reference residing in another source file accessible in the current file for use with \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}.
+\end{DoxyItemize}\hypertarget{docs_rombanking_mbcs_autotoc_md81}{}\doxysubsubsection{Banking and Functions}\label{docs_rombanking_mbcs_autotoc_md81}
+\label{docs_rombanking_mbcs_banked_keywords}%
+\Hypertarget{docs_rombanking_mbcs_banked_keywords}%
+\hypertarget{docs_rombanking_mbcs_autotoc_md82}{}\doxyparagraph{B\+A\+N\+K\+E\+D/\+N\+O\+N\+B\+A\+N\+K\+E\+D keywords}\label{docs_rombanking_mbcs_autotoc_md82}
+
+\begin{DoxyItemize}
+\item {\ttfamily B\+A\+N\+K\+ED}\+:
+\begin{DoxyItemize}
+\item The function will use banked sdcc calls
+\item Placed in the bank selected by it\textquotesingle{}s source file (or compiler switches)
+\end{DoxyItemize}
+\item {\ttfamily N\+O\+N\+B\+A\+N\+K\+ED}\+:
+\begin{DoxyItemize}
+\item Placed in the non-\/banked lower 16K region (bank 0), regardless of the bank selected by it\textquotesingle{}s source file.
+\end{DoxyItemize}
+\item {\ttfamily $<$not-\/specified$>$}\+:
+\begin{DoxyItemize}
+\item The function does not use sdcc banked calls ({\ttfamily near} instead of {\ttfamily far})
+\item Placed in the bank selected by it\textquotesingle{}s source file (or compiler switches)
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_rombanking_mbcs_banked_calls}%
+\Hypertarget{docs_rombanking_mbcs_banked_calls}%
+\hypertarget{docs_rombanking_mbcs_autotoc_md83}{}\doxyparagraph{Banked Function Calls}\label{docs_rombanking_mbcs_autotoc_md83}
+Banked functions can be called as follows.
+\begin{DoxyItemize}
+\item When defined with the {\ttfamily B\+A\+N\+K\+ED} keyword. Example\+: {\ttfamily void my\+\_\+function() B\+A\+N\+K\+ED \{ do stuff \}} in a source file which has had it\textquotesingle{}s bank set (see above).
+\item Using \mbox{\hyperlink{docs_rombanking_mbcs_far_pointers}{far\+\_\+pointers}}
+\item When defined with an area set up using the {\ttfamily \+\_\+\+\_\+addressmod} keyword (See the {\ttfamily banks\+\_\+new} example project and the S\+D\+CC manual for details)
+\item Using \mbox{\hyperlink{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M()}} (and related functions for other M\+B\+Cs) to manually switch in the required bank and then call the function.
+\end{DoxyItemize}
+
+Non-\/banked functions (either in fixed Bank 0, or in an non-\/banked R\+OM with no M\+BC)
+\begin{DoxyItemize}
+\item May call functions in any bank\+: {\bfseries{Y\+ES}}
+\item May use data in any bank\+: {\bfseries{Y\+ES}}
+\end{DoxyItemize}
+
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000004}{Todo}}]Fill in this info for Banked Functions Banked functions (located in a switchable R\+OM bank)
+\begin{DoxyItemize}
+\item May call functions in any bank\+: ?
+\item May use data in any bank\+: {\bfseries{NO}} (may only use data from currently active banks)
+\end{DoxyItemize}\end{DoxyRefDesc}
+
+
+Limitations\+:
+\begin{DoxyItemize}
+\item S\+D\+CC banked calls and far\+\_\+pointers in G\+B\+DK only save one byte for the R\+OM bank. So, for example, they are limtied to {\bfseries{bank 31}} max for M\+B\+C1 and {\bfseries{bank 255}} max for M\+B\+C5. This is due to the bank switching for those M\+B\+Cs requiring a second, additional write to select the upper bits for more banks (banks 32+ in M\+B\+C1 and banks 256+ in M\+B\+C5).
+\end{DoxyItemize}\hypertarget{docs_rombanking_mbcs_autotoc_md84}{}\doxysubsubsection{Const Data (\+Variables in R\+O\+M)}\label{docs_rombanking_mbcs_autotoc_md84}
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000005}{Todo}}]Const Data (Variables in R\+OM)\end{DoxyRefDesc}
+\hypertarget{docs_rombanking_mbcs_autotoc_md85}{}\doxysubsubsection{Variables in R\+AM}\label{docs_rombanking_mbcs_autotoc_md85}
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000006}{Todo}}]Variables in R\+AM\end{DoxyRefDesc}
+\hypertarget{docs_rombanking_mbcs_autotoc_md86}{}\doxysubsubsection{Far Pointers}\label{docs_rombanking_mbcs_autotoc_md86}
+\label{docs_rombanking_mbcs_far_pointers}%
+\Hypertarget{docs_rombanking_mbcs_far_pointers}%
+Far pointers include a segment (bank) selector so they are able to point to addresses (functions or data) outside of the current bank (unlike normal pointers which are not bank-\/aware). A set of macros is provided by G\+B\+DK 2020 for working with far pointers.
+
+{\bfseries{Warning\+:}} Do not call the far pointer function macros from inside interrupt routines (I\+S\+Rs). The far pointer function macros use a global variable that would not get restored properly if a function called that way was interrupted by another one called the same way. However, they may be called recursively.
+
+See \mbox{\hyperlink{far__ptr_8h_a7f4ab1893ea392f8bf042a3b97de4730}{F\+A\+R\+\_\+\+C\+A\+LL}}, \mbox{\hyperlink{far__ptr_8h_a0c227677a96f9bf7e84a90922f2f8708}{T\+O\+\_\+\+F\+A\+R\+\_\+\+P\+TR}} and the {\ttfamily banks\+\_\+farptr} example project.\hypertarget{docs_rombanking_mbcs_autotoc_md87}{}\doxysubsubsection{Bank switching}\label{docs_rombanking_mbcs_autotoc_md87}
+You can manually switch banks using the \mbox{\hyperlink{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M()}}, \mbox{\hyperlink{gb_8h_a6e40dcc763efd953181c7400642a9f69}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M()}}, and other related macros. See {\ttfamily banks.\+c} project for an example.
+
+Note\+: You can only do a switch\+\_\+rom\+\_\+bank call from non-\/banked {\ttfamily \+\_\+\+C\+O\+DE} since otherwise you would switch out the code that was executing. Global routines that will be called without an expectation of bank switching should fit within the limited 16k of non-\/banked {\ttfamily \+\_\+\+C\+O\+DE}.\hypertarget{docs_rombanking_mbcs_autotoc_md88}{}\doxysubsubsection{Restoring the current bank (after calling functions which change it without restoring)}\label{docs_rombanking_mbcs_autotoc_md88}
+\label{docs_rombanking_mbcs_banking_current_bank}%
+\Hypertarget{docs_rombanking_mbcs_banking_current_bank}%
+If a function call is made (for example inside an I\+SR) which changes the bank {\itshape without} restoring it, then the \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} variable should be saved and then restored.
+
+For example, {\bfseries{instead}} of this code\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{void vbl\_music\_isr(void)}
+\DoxyCodeLine{\{}
+\DoxyCodeLine{ // A function which changes the bank and}
+\DoxyCodeLine{ // *doesn't* restore it after changing.}
+\DoxyCodeLine{ some\_function();}
+\DoxyCodeLine{\}}
+\end{DoxyCode}
+
+
+It should be\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{void vbl\_music\_isr(void)}
+\DoxyCodeLine{\{}
+\DoxyCodeLine{ // Save the current bank}
+\DoxyCodeLine{ uint8\_t \_saved\_bank = \_current\_bank;}
+\DoxyCodeLine{}
+\DoxyCodeLine{ // A function which changes the bank and}
+\DoxyCodeLine{ // *doesn't* restore it after changing.}
+\DoxyCodeLine{ some\_function();}
+\DoxyCodeLine{}
+\DoxyCodeLine{ // Now restore the current bank}
+\DoxyCodeLine{ SWITCH\_ROM(\_saved\_bank);}
+\DoxyCodeLine{\}}
+\end{DoxyCode}
+\hypertarget{docs_rombanking_mbcs_autotoc_md89}{}\doxysubsubsection{Currently active bank\+: \+\_\+current\+\_\+bank}\label{docs_rombanking_mbcs_autotoc_md89}
+The global variable \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} is updated automatically when calling \mbox{\hyperlink{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M()}}, \mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1()}} and \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5}}, or when a {\ttfamily B\+A\+N\+K\+ED} function is called.
+
+\label{docs_rombanking_mbcs_rom_autobanking}%
+\Hypertarget{docs_rombanking_mbcs_rom_autobanking}%
+\hypertarget{docs_rombanking_mbcs_autotoc_md90}{}\doxysubsection{Auto-\/\+Banking}\label{docs_rombanking_mbcs_autotoc_md90}
+A R\+OM bank auto-\/assignment feature was added in G\+B\+DK 2020 4.\+0.\+2.
+
+Instead of having to manually specify which bank a source file will reside it, the banks can be assigned automatically to make the best use of space. The bank assignment operates on object files, after compiling/assembling and before linking.
+
+To turn on auto-\/banking, use the {\ttfamily -\/autobank} argument with lcc
+
+For a source example see the {\ttfamily banks\+\_\+autobank} project.
+
+In the source files you want auto-\/banked, do the following\+:
+\begin{DoxyItemize}
+\item Set the source file to be autobanked {\ttfamily \#pragma bank 255} (this sets the temporary bank to {\ttfamily 255}, which \mbox{\hyperlink{docs_toolchain_bankpack}{bankpack}} then updates when repacking)
+\item Create a reference to store the bank number for that source file\+: {\ttfamily B\+A\+N\+K\+R\+EF($<$some-\/bank-\/reference-\/name$>$)}.
+\begin{DoxyItemize}
+\item More than one {\ttfamily \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}} may be created per file, but they should always have unique names.
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+In the other source files you want to access the banked data from, do the following\+:
+\begin{DoxyItemize}
+\item Create an extern so the bank reference in another file is accessible\+: {\ttfamily B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+RN($<$some-\/bank-\/reference-\/name$>$)}.
+\item Obtain the bank number using {\ttfamily B\+A\+NK($<$some-\/bank-\/reference-\/name$>$)}.
+\end{DoxyItemize}
+
+Example\+: level\+\_\+1\+\_\+map.\+c \begin{DoxyVerb} #pragma bank 255
+ BANKREF(level_1_map)
+ ...
+ const uint8_t level_1_map[] = {... some map data here ...};
+\end{DoxyVerb}
+
+
+Accessing that data\+: main.\+c \begin{DoxyVerb} BANKREF_EXTERN(level_1_map)
+ ...
+ SWITCH_ROM( BANK(level_1_map) );
+ // Do something with level_1_map[]
+\end{DoxyVerb}
+
+
+Features and Notes\+:
+\begin{DoxyItemize}
+\item Fixed banked source files can be used in the same project as auto-\/banked source files. The bankpack tool will attempt to pack the auto-\/banked source files as efficiently as possible around the fixed-\/bank ones.
+\end{DoxyItemize}
+
+Making sure bankpack checks all files\+:
+\begin{DoxyItemize}
+\item In order to correctly calculate the bank for all files every time, it is best to use the {\ttfamily -\/ext=} flag and save the auto-\/banked output to a different extension (such as {\ttfamily .rel}) and then pass the modified files to the linker. That way all object files will be processed each time the program is compiled. \begin{DoxyVerb}Recommended:
+.c and .s -> (compiler) .o -> (bankpack) -> .rel -> (linker) ... -> .gb
+\end{DoxyVerb}
+
+\item It is important because when bankpack assigns a bank for an autobanked (bank=255) object file (.o) it rewrites the bank and will then no longer see the file as one that needs to be auto-\/banked. That file will then remain in it\textquotesingle{}s previously assigned bank until a source change causes the compiler to rebuild it to an object file again which resets it\textquotesingle{}s bank to 255.
+\item For example consider a fixed-\/bank source file growing too large to share a bank with an auto-\/banked source file that was previously assigned to it. To avoid a bank overflow it would be important to have the auto-\/banked file check every time whether it can share that bank or not.
+\item See \mbox{\hyperlink{docs_toolchain_bankpack}{bankpack}} for more options and settings
+\end{DoxyItemize}\hypertarget{docs_rombanking_mbcs_autotoc_md91}{}\doxysubsection{Errors related to banking (overflow, multiple writes to same location)}\label{docs_rombanking_mbcs_autotoc_md91}
+A {\itshape bank overflow} during compile/link time (in \mbox{\hyperlink{docs_toolchain_makebin}{makebin}}) is when more code and data are allocated to a R\+OM bank than it has capacity for. The address for any overflowed data will be incorrect and the data is potentially unreachable since it now resides at the start of a different bank instead of the end of the expected bank.
+
+See the \mbox{\hyperlink{docs_faq_faq_bank_overflow_errors}{F\+AQ entry about bank overflow errors}}.
+
+The current toolchain can only detect and warn (using \mbox{\hyperlink{docs_toolchain_ihxcheck}{ihxcheck}}) when one bank overflows into another bank that has data at its start. It cannot warn if a bank overflows into an empty one. For more complete detection, you can use the third-\/party \mbox{\hyperlink{docs_links_and_tools_romusage}{romusage}} tool.\hypertarget{docs_rombanking_mbcs_autotoc_md92}{}\doxysubsection{Bank space usage}\label{docs_rombanking_mbcs_autotoc_md92}
+In order to see how much space is used or remains available in a bank, you can use the third-\/party \mbox{\hyperlink{docs_links_and_tools_romusage}{romusage}} tool.\hypertarget{docs_rombanking_mbcs_autotoc_md93}{}\doxysubsubsection{Other important notes}\label{docs_rombanking_mbcs_autotoc_md93}
+
+\begin{DoxyItemize}
+\item The \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5}} macro is not interrupt-\/safe. If using less than 256 banks you may always use S\+W\+I\+T\+C\+H\+\_\+\+R\+OM -\/ that is faster. Even if you use mbc5 hardware chip in the cart.
+\end{DoxyItemize}\hypertarget{docs_rombanking_mbcs_autotoc_md94}{}\doxysubsection{Banking example projects}\label{docs_rombanking_mbcs_autotoc_md94}
+There are several projects in the G\+B\+DK 2020 examples folder which demonstrate different ways to use banking.
+\begin{DoxyItemize}
+\item {\ttfamily Banks}\+: A basic banking example
+\item {\ttfamily Banks\+\_\+new}\+: Examples of using new bank assignment and calling conventions available in G\+B\+DK 2020 and it\textquotesingle{}s updated S\+D\+CC version.
+\item {\ttfamily Banks\+\_\+farptr}\+: Using far pointers which have the bank number built into the pointer.
+\item {\ttfamily Banks\+\_\+autobank}\+: Shows how to use the bank auto-\/assignment feature of in G\+B\+DK 2020 4.\+0.\+2 or later, instead of having to manually specify which bank a source file will reside it.
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/docs_supported_consoles.tex b/docs/latex/docs_supported_consoles.tex
new file mode 100644
index 00000000..68e0e25d
--- /dev/null
+++ b/docs/latex/docs_supported_consoles.tex
@@ -0,0 +1,266 @@
+\label{docs_supported_consoles_docs_consoles_supported_list}%
+\Hypertarget{docs_supported_consoles_docs_consoles_supported_list}%
+\hypertarget{docs_supported_consoles_autotoc_md116}{}\doxysubsection{Consoles Supported by G\+B\+DK}\label{docs_supported_consoles_autotoc_md116}
+As of version {\ttfamily 4.\+0.\+5} G\+B\+DK includes support for other consoles in addition to the Game Boy.
+
+
+\begin{DoxyItemize}
+\item Game Boy and related clones
+\begin{DoxyItemize}
+\item Nintendo Game Boy / Game Boy Color (G\+B/\+G\+BC)
+\item Analogue Pocket (AP)
+\item Mega Duck / Cougar Boy (D\+U\+CK)
+\end{DoxyItemize}
+\item Sega Consoles
+\begin{DoxyItemize}
+\item Sega Master System (S\+MS)
+\item Sega Game Gear (GG)
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+While the G\+B\+DK A\+PI has many convenience functions that work the same or similar across different consoles, it\textquotesingle{}s important to keep their different capabilities in mind when writing code intended to run on more than one. Some (but not all) of the differences are screen sizes, color abilities, memory layouts, processor type (z80 vs gbz80/sm83) and speed.
+
+\label{docs_supported_consoles_docs_consoles_compiling}%
+\Hypertarget{docs_supported_consoles_docs_consoles_compiling}%
+\hypertarget{docs_supported_consoles_autotoc_md117}{}\doxysubsection{Cross Compiling for Different Consoles}\label{docs_supported_consoles_autotoc_md117}
+\hypertarget{docs_supported_consoles_autotoc_md118}{}\doxysubsubsection{lcc}\label{docs_supported_consoles_autotoc_md118}
+When compiling and building through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} use the {\ttfamily -\/m$<$port$>$\+:$<$plat$>$} flag to select the desired console via it\textquotesingle{}s port and platform combination.\hypertarget{docs_supported_consoles_autotoc_md119}{}\doxysubsubsection{sdcc}\label{docs_supported_consoles_autotoc_md119}
+When building directly with the sdcc toolchain, the following must be specified manually (when using \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} it will populate these automatically based on {\ttfamily -\/m$<$port$>$\+:$<$plat$>$}).
+
+When compiling with \mbox{\hyperlink{docs_toolchain_settings_sdcc-settings}{sdcc}}\+:
+\begin{DoxyItemize}
+\item {\ttfamily -\/m$<$port$>$}, {\ttfamily -\/D\+\_\+\+\_\+\+P\+O\+R\+T\+\_\+$<$port$>$} and {\ttfamily -\/D\+\_\+\+\_\+\+T\+A\+R\+G\+E\+T\+\_\+$<$plat$>$}
+\end{DoxyItemize}
+
+When assembling with \mbox{\hyperlink{docs_toolchain_settings_sdasgb-settings}{sdasgb}} (for G\+B/\+AP) and \mbox{\hyperlink{docs_toolchain_settings_sdasz80-settings}{sdasz80}} (for S\+M\+S/\+GG)\+:
+\begin{DoxyItemize}
+\item Select the appropriate include path\+: {\ttfamily -\/I$<$gbdk-\/path$>$lib/small/asxxxx/$<$plat$>$}
+\end{DoxyItemize}
+
+When linking with \mbox{\hyperlink{docs_toolchain_settings_sdldgb-settings}{sdldgb}} (for G\+B/\+AP) and \mbox{\hyperlink{docs_toolchain_settings_sdldz80-settings}{sdldz80}} (for S\+M\+S/\+GG)\+:
+\begin{DoxyItemize}
+\item Select the appropriate include paths\+: {\ttfamily -\/k $<$gbdk-\/path$>$lib/small/asxxxx/$<$port$>$}, {\ttfamily -\/k $<$gbdk-\/path$>$lib/small/asxxxx/$<$plat$>$}
+\item Include the appropriate library files {\ttfamily -\/l $<$port$>$.lib}, {\ttfamily -\/l $<$plat$>$.lib}
+\item The crt will be under {\ttfamily $<$gbdk-\/path$>$lib/small/asxxxx/$<$plat$>$/crt0.o}
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md120}{}\doxysubsubsection{Console Port and Platform Settings}\label{docs_supported_consoles_autotoc_md120}
+
+\begin{DoxyItemize}
+\item Nintendo Game Boy / Game Boy Color
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/mgbz80\+:gb}
+\item port\+:{\ttfamily gbz80}, plat\+:{\ttfamily gb}
+\end{DoxyItemize}
+\item Analogue Pocket
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/mgbz80\+:ap}
+\item port\+:{\ttfamily gbz80}, plat\+:{\ttfamily ap}
+\end{DoxyItemize}
+\item Mega Duck / Cougar Boy
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/mgbz80\+:duck}
+\item port\+:{\ttfamily gbz80}, plat\+:{\ttfamily duck}
+\end{DoxyItemize}
+\item Sega Master System
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/mz80\+:sms}
+\item port\+:{\ttfamily z80}, plat\+:{\ttfamily sms}
+\end{DoxyItemize}
+\item Sega Game Gear
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} \+: {\ttfamily -\/mz80\+:gg}
+\item port\+:{\ttfamily z80}, plat\+:{\ttfamily gg}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md121}{}\doxysubsection{Cross-\/\+Platform Constants}\label{docs_supported_consoles_autotoc_md121}
+There are several constant \#defines that can be used to help select console specific code during compile time (with {\ttfamily \#ifdef}, {\ttfamily \#ifndef}) .\hypertarget{docs_supported_consoles_autotoc_md122}{}\doxysubsubsection{Console Identifiers}\label{docs_supported_consoles_autotoc_md122}
+
+\begin{DoxyItemize}
+\item When {\ttfamily $<$gb/gb.\+h$>$} is included (either directly or through {\ttfamily $<$gbdk/platform.\+h$>$})
+\begin{DoxyItemize}
+\item When building for Game Boy\+:
+\begin{DoxyItemize}
+\item {\ttfamily N\+I\+N\+T\+E\+N\+DO} will be \#defined
+\item {\ttfamily G\+A\+M\+E\+B\+OY} will be \#defined
+\end{DoxyItemize}
+\item When building for Analogue Pocket
+\begin{DoxyItemize}
+\item {\ttfamily N\+I\+N\+T\+E\+N\+DO} will be \#defined
+\item {\ttfamily A\+N\+A\+L\+O\+G\+U\+E\+P\+O\+C\+K\+ET} will be \#defined
+\end{DoxyItemize}
+\item When building for Mega Duck / Cougar Boy
+\begin{DoxyItemize}
+\item {\ttfamily N\+I\+N\+T\+E\+N\+DO} will be \#defined
+\item {\ttfamily M\+E\+G\+A\+D\+U\+CK} will be \#defined
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item When {\ttfamily $<$sms/sms.\+h $>$} is included (either directly or through {\ttfamily $<$gbdk/platform.\+h$>$})
+\begin{DoxyItemize}
+\item When building for Master System
+\begin{DoxyItemize}
+\item {\ttfamily S\+E\+GA} will be \#defined
+\item {\ttfamily M\+A\+S\+T\+E\+R\+S\+Y\+S\+T\+EM} will be \#defined
+\end{DoxyItemize}
+\item When building for Game Gear
+\begin{DoxyItemize}
+\item {\ttfamily S\+E\+GA} will be \#defined
+\item {\ttfamily G\+A\+M\+E\+G\+E\+AR} will be \#defined
+\end{DoxyItemize}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md123}{}\doxysubsubsection{Console Hardware Properties}\label{docs_supported_consoles_autotoc_md123}
+Constants that describe properties of the console hardware are listed below. Their values will change to reflect the current console target that is being built.
+
+
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_2hardware_8h_a519e327cac96f68a8ca9b77e0343672f}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+X\+\_\+\+O\+F\+F\+S\+ET}}, \mbox{\hyperlink{gb_2hardware_8h_af334c0e7dd6e434b3dbebd45bcdeb75a}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+Y\+\_\+\+O\+F\+F\+S\+ET}}
+\item \mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}}, \mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}}
+\item \mbox{\hyperlink{gb_2hardware_8h_a491dc081eae8c81e7ca88075ab806291}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+W\+I\+D\+TH}}, \mbox{\hyperlink{gb_2hardware_8h_a81fb56b6778772f829dab4c534e7749e}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+H\+E\+I\+G\+HT}}
+\item \mbox{\hyperlink{gb_2hardware_8h_a4d682ed7a6158c5ba10afec739b17a8a}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+M\+A\+P\+\_\+\+E\+N\+T\+R\+Y\+\_\+\+S\+I\+ZE}}
+\item \mbox{\hyperlink{gb_2hardware_8h_af531e7ac0c0a58517fa3061631745c31}{D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+X}}, \mbox{\hyperlink{gb_2hardware_8h_a7f6c8420831388300bbec13ea4cb57a0}{D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+Y}}
+\item \mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}, \mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md124}{}\doxysubsection{Using $<$gbdk/...$>$ headers}\label{docs_supported_consoles_autotoc_md124}
+Some include files under {\ttfamily $<$gbdk/..$>$} are cross platform and others allow the build process to auto-\/select the correct include file for the current target port and platform (console).
+
+For example, the following can be used \begin{DoxyVerb}#include
+#include
+\end{DoxyVerb}
+
+
+Instead of \begin{DoxyVerb}#include
+#include
+\end{DoxyVerb}
+
+
+and \begin{DoxyVerb}#include
+#include
+\end{DoxyVerb}
+
+
+\label{docs_supported_consoles_docs_consoles_cross_platform_examples}%
+\Hypertarget{docs_supported_consoles_docs_consoles_cross_platform_examples}%
+\hypertarget{docs_supported_consoles_autotoc_md125}{}\doxysubsection{Cross Platform Example Projects}\label{docs_supported_consoles_autotoc_md125}
+G\+B\+DK includes an number of cross platform example projects. These projects show how to write code that can be compiled and run on multiple different consoles (for example Game Boy and Game Gear) with, in some cases, minimal differences.
+
+They also show how to build for multiple target consoles with a single build command and {\ttfamily Makefile}. The {\ttfamily Makefile.\+targets} allows selecting different {\ttfamily port} and {\ttfamily plat} settings when calling the build stages.\hypertarget{docs_supported_consoles_autotoc_md126}{}\doxysubsubsection{Cross Platform Asset Example}\label{docs_supported_consoles_autotoc_md126}
+The cross-\/platform {\ttfamily Logo} example project shows how assets can be managed for multiple different console targets together.
+
+In the example \mbox{\hyperlink{docs_toolchain_utility_png2asset}{utility\+\_\+png2asset}} is used to generate assets in the native format for each console at compile-\/time from separate source P\+NG images. The Makefile is set to use the source P\+NG folder which matches the current console being compiled, and the source code uses \mbox{\hyperlink{gb_8h_a68651e50243349b48164a8ad983dca4e}{set\+\_\+native\+\_\+tile\+\_\+data()}} to load the assets tiles in native format.\hypertarget{docs_supported_consoles_autotoc_md127}{}\doxysubsection{Porting From Game Boy to Analogue Pocket}\label{docs_supported_consoles_autotoc_md127}
+The Analogue Pocket is (for practical purposes) functionally identical to the Game Boy / Color, but has a couple altered register flag and address definitions and a different boot logo. In order for software to be easily ported to the Analogue Pocket, or to run on both, use the following practices.\hypertarget{docs_supported_consoles_autotoc_md128}{}\doxysubsubsection{Registers and Flags}\label{docs_supported_consoles_autotoc_md128}
+Use A\+PI defined registers and register flags instead of hardwired ones
+\begin{DoxyItemize}
+\item L\+C\+DC register\+: \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}} or \mbox{\hyperlink{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}{r\+L\+C\+DC}}
+\item S\+T\+AT register\+: \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} or \mbox{\hyperlink{gb_2hardware_8h_a338ec378453b4457efdb3008978c0f28}{r\+S\+T\+AT}}
+\item L\+C\+DC flags\+: -\/$>$ L\+C\+D\+C\+F\+\_\+... (example\+: \mbox{\hyperlink{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}{L\+C\+D\+C\+F\+\_\+\+ON}})
+\item S\+T\+AT flags\+: -\/$>$ S\+T\+A\+T\+F\+\_\+... (example\+: \mbox{\hyperlink{gb_2hardware_8h_a3b53105cc5be896b48794ba82d2aeb4c}{S\+T\+A\+T\+F\+\_\+\+L\+YC}})
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md129}{}\doxysubsubsection{Boot logo}\label{docs_supported_consoles_autotoc_md129}
+As long as the target console is \mbox{\hyperlink{docs_supported_consoles_docs_consoles_compiling}{set during build time}} then the correct boot logo will be automatically selected.\hypertarget{docs_supported_consoles_autotoc_md130}{}\doxysubsection{Porting From Game Boy to Mega Duck / Cougar Boy}\label{docs_supported_consoles_autotoc_md130}
+The Mega Duck is fairly similar to the classic Game Boy. It has a couple altered register flag and address definitions, no boot logo and a different startup/entry-\/point address. In order for software to be easily ported to the Mega Duck, or to run on both, use the following practices.\hypertarget{docs_supported_consoles_autotoc_md131}{}\doxysubsubsection{Registers and Flags}\label{docs_supported_consoles_autotoc_md131}
+Use A\+PI defined registers and register flags instead of hardwired ones
+\begin{DoxyItemize}
+\item L\+C\+DC register\+: \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}} or \mbox{\hyperlink{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}{r\+L\+C\+DC}}
+\item S\+T\+AT register\+: \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} or \mbox{\hyperlink{gb_2hardware_8h_a338ec378453b4457efdb3008978c0f28}{r\+S\+T\+AT}}
+\item L\+C\+DC flags\+: -\/$>$ L\+C\+D\+C\+F\+\_\+... (example\+: \mbox{\hyperlink{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}{L\+C\+D\+C\+F\+\_\+\+ON}})
+\item S\+T\+AT flags\+: -\/$>$ S\+T\+A\+T\+F\+\_\+... (example\+: \mbox{\hyperlink{gb_2hardware_8h_a3b53105cc5be896b48794ba82d2aeb4c}{S\+T\+A\+T\+F\+\_\+\+L\+YC}})
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md132}{}\doxysubsection{Porting From Game Boy to S\+M\+S/\+GG}\label{docs_supported_consoles_autotoc_md132}
+\hypertarget{docs_supported_consoles_autotoc_md133}{}\doxysubsubsection{Tile Data and Tile Map loading}\label{docs_supported_consoles_autotoc_md133}
+\hypertarget{docs_supported_consoles_autotoc_md134}{}\doxyparagraph{Tile and Map Data in 2bpp Game Boy Format}\label{docs_supported_consoles_autotoc_md134}
+
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data()}} and \mbox{\hyperlink{gb_8h_ae45b1c639698951b47e44fa8e89556f2}{set\+\_\+sprite\+\_\+data()}} will load 2bpp tile data in \char`\"{}game boy\char`\"{} format on both GB and S\+M\+S/\+GG.
+\item On the S\+M\+S/\+GG \mbox{\hyperlink{gb_8h_aa224c9bac27c7fd268e62bdf33338a84}{set\+\_\+2bpp\+\_\+palette()}} sets 4 colors that will be used when loading 2bpp assets with \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data()}}. This allows GB assets to be easily colorized without changing the asset format. There is some performance penalty for using the conversion.
+\item \mbox{\hyperlink{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}{set\+\_\+bkg\+\_\+tiles()}} loads 1-\/byte-\/per-\/tile tilemaps both for the GB and S\+M\+S/\+GG
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md135}{}\doxyparagraph{Tile and Map Data in Native Format}\label{docs_supported_consoles_autotoc_md135}
+Use the following api calls when assets are avaialble in the native format for each platform.
+
+\mbox{\hyperlink{gb_8h_a68651e50243349b48164a8ad983dca4e}{set\+\_\+native\+\_\+tile\+\_\+data()}}
+\begin{DoxyItemize}
+\item G\+B/\+AP\+: loads 2bpp tiles data
+\item S\+M\+S/\+GG\+: loads 4bpp tile data
+\end{DoxyItemize}
+
+\mbox{\hyperlink{gb_8h_a55f82ff980398dd97036fd936ebd727e}{set\+\_\+tile\+\_\+map()}}
+\begin{DoxyItemize}
+\item G\+B/\+AP\+: loads 1-\/byte-\/per-\/tile tilemaps
+\item S\+M\+S/\+GG\+: loads 2-\/byte-\/per-\/tile tilemaps
+\end{DoxyItemize}
+
+There are also bit-\/depth specific A\+PI calls\+:
+\begin{DoxyItemize}
+\item 1bpp\+: \mbox{\hyperlink{sms_8h_adcb394299a1033616fc7d2faec8bd6ad}{set\+\_\+1bpp\+\_\+colors}}, \mbox{\hyperlink{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_a2cc121fbeb5570248531b85a8f0b5b97}{set\+\_\+sprite\+\_\+1bpp\+\_\+data}}
+\item 2bpp\+: \mbox{\hyperlink{sms_8h_aa224c9bac27c7fd268e62bdf33338a84}{set\+\_\+2bpp\+\_\+palette}}, \mbox{\hyperlink{sms_8h_aa7ba76e4d44dbf19da351fd1ea8e3023}{set\+\_\+bkg\+\_\+2bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_a10ee2919fcab7a5c482816ed718d1c4a}{set\+\_\+sprite\+\_\+2bpp\+\_\+data}}, \mbox{\hyperlink{sms_8h_ab752b1bb0f58da2a6d52e9747c4b3dd8}{set\+\_\+tile\+\_\+2bpp\+\_\+data}} (sms/gg only)
+\item 2bpp\+: \mbox{\hyperlink{sms_8h_aeff13dca11be49e8c159820c616016ec}{set\+\_\+bkg\+\_\+4bpp\+\_\+data}} (sms/gg only), \mbox{\hyperlink{sms_8h_a24f53cfe7e25c04fbb5dcb08cfb3b432}{set\+\_\+sprite\+\_\+4bpp\+\_\+data}} (sms/gg only)
+\end{DoxyItemize}\hypertarget{docs_supported_consoles_autotoc_md136}{}\doxyparagraph{Emulated Game Boy Color map attributes on the S\+M\+S/\+Game Gear}\label{docs_supported_consoles_autotoc_md136}
+On the Game Boy Color, \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} is used to select between the regular background tile map and the background attribute tile map (for setting tile color palette and other properties).
+
+This behavior is emulated for the S\+M\+S/\+GG when using \mbox{\hyperlink{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}{set\+\_\+bkg\+\_\+tiles()}} and \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}. It allows writing a 1-\/byte tile map separately from a 1-\/byte attributes map.
+
+\begin{DoxyNote}{Note}
+Tile map attributes on S\+M\+S/\+Game Gear use different control bits than the Game Boy Color, so a modified attribute map must be used.
+\end{DoxyNote}
+\hypertarget{docs_supported_consoles_autotoc_md137}{}\doxysubsection{Hardware Comparison}\label{docs_supported_consoles_autotoc_md137}
+The specs below reflect the typical configuration of hardware when used with G\+B\+DK and is not meant as a complete list of their capabilities.
+
+G\+B/\+AP
+\begin{DoxyItemize}
+\item Sprites\+:
+\begin{DoxyItemize}
+\item 256 tiles (upper 128 are shared with background) (amount is doubled in C\+GB mode)
+\item tile flipping/mirroring\+: yes
+\item 40 total, max 10 per line
+\item 2 x 4 color palette (color 0 transparent). 8 x 4 color palettes in C\+GB mode
+\end{DoxyItemize}
+\item Background\+: 256 tiles (typical setup\+: upper 128 are shared with sprites) (amount is doubled in C\+GB mode)
+\begin{DoxyItemize}
+\item tile flipping/mirroring\+: no (yes in C\+GB mode)
+\item 1 x 4 color palette. 8 x 4 color palettes in C\+GB mode
+\end{DoxyItemize}
+\item Window \char`\"{}layer\char`\"{}\+: available
+\item Screen\+: 160 x 144
+\item Hardware Map\+: 256 x 256
+\end{DoxyItemize}
+
+S\+M\+S/\+GG
+\begin{DoxyItemize}
+\item Sprites\+:
+\begin{DoxyItemize}
+\item 256 tiles (a bit less in the default setup)
+\item tile flipping/mirroring\+: no
+\item 64 total, max 8 per line
+\item 1 x 16 color palette (color 0 transparent)
+\end{DoxyItemize}
+\item Background\+: 512 tiles (upper 256 are shared with sprites)
+\begin{DoxyItemize}
+\item tile flipping/mirroring\+: yes
+\item 2 x 16 color palettes
+\end{DoxyItemize}
+\item Window \char`\"{}layer\char`\"{}\+: not available
+\item S\+MS
+\begin{DoxyItemize}
+\item Screen\+: 256 x 192
+\item Hardware Map\+: 256 x 224
+\end{DoxyItemize}
+\item GG
+\begin{DoxyItemize}
+\item Screen\+: 160 x 144
+\item Hardware Map\+: 256 x 224
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_supported_consoles_docs_consoles_safe_display_controller_access}%
+\Hypertarget{docs_supported_consoles_docs_consoles_safe_display_controller_access}%
+\hypertarget{docs_supported_consoles_autotoc_md138}{}\doxysubsubsection{Safe V\+R\+A\+M / Display Controller Access}\label{docs_supported_consoles_autotoc_md138}
+G\+B/\+AP
+\begin{DoxyItemize}
+\item V\+R\+AM / Display Controller (P\+PU)
+\begin{DoxyItemize}
+\item V\+R\+AM and some other display data / registers should only be written to when the \mbox{\hyperlink{gb_2hardware_8h_a3b0bf7449b517b3cda2a89428db6deb9}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+B\+U\+SY}} bit of \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} is off. Most G\+B\+DK A\+PI calls manage this automatically.
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+S\+M\+S/\+GG
+\begin{DoxyItemize}
+\item Display Controller (V\+DP)
+\begin{DoxyItemize}
+\item Writing to the V\+DP should not be interrupted while an operation is already in progress (since that will interfere with the internal data pointer causing data to be written to the wrong location).
+\item Recommended approach\+: Avoid writing to the V\+DP (tiles, map, scrolling, colors, etc) during an interrupt routine (I\+SR).
+\item Alternative (requires careful implementation)\+: Make sure writes to the V\+DP during an I\+SR are only performed when the \mbox{\hyperlink{sms_8h_a388d1dff2698172ba8574e43f5c77c93}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+\+O\+FF}} flag indicates it is safe to do so.
+\end{DoxyItemize}
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/docs_toolchain.tex b/docs/latex/docs_toolchain.tex
new file mode 100644
index 00000000..a0c5f66e
--- /dev/null
+++ b/docs/latex/docs_toolchain.tex
@@ -0,0 +1,310 @@
+\label{docs_toolchain_toolchain_overview}%
+\Hypertarget{docs_toolchain_toolchain_overview}%
+\hypertarget{docs_toolchain_autotoc_md95}{}\doxysubsection{Overview}\label{docs_toolchain_autotoc_md95}
+G\+B\+DK 2020 uses the S\+D\+CC compiler along with some custom tools to build Game Boy R\+O\+Ms.
+\begin{DoxyItemize}
+\item All tools are located under {\ttfamily bin/}
+\item The typical order of tools called is as follows. (When using lcc these steps are usually performed automatically.)
+\begin{DoxyEnumerate}
+\item Compile and assemble source files (.c, .s, .asm) with \mbox{\hyperlink{docs_toolchain_sdcc}{sdcc}} and \mbox{\hyperlink{docs_toolchain_sdasgb}{sdasgb}}
+\item Optional\+: perform auto banking with \mbox{\hyperlink{docs_toolchain_bankpack}{bankpack}} on the object files
+\item Link the object files into .ihx file with \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}}
+\item Validate the .ihx file with \mbox{\hyperlink{docs_toolchain_ihxcheck}{ihxcheck}}
+\item Convert the .ihx file to a R\+OM file (.gb, .gbc) with \mbox{\hyperlink{docs_toolchain_makebin}{makebin}}
+\end{DoxyEnumerate}
+\end{DoxyItemize}
+
+To see individual arguments and options for a tool, run that tool from the command line with either no arguments or with {\ttfamily -\/h}.\hypertarget{docs_toolchain_autotoc_md96}{}\doxysubsection{Data Types}\label{docs_toolchain_autotoc_md96}
+For data types and special C keywords, see \mbox{\hyperlink{asm_2gbz80_2types_8h_file_asm_gbz80_types_h}{asm/gbz80/types.h}} and \mbox{\hyperlink{asm_2types_8h_file_asm_types_h}{asm/types.h}}.
+
+Also see the S\+D\+CC manual (scroll down a little on the linked page)\+: \href{http://sdcc.sourceforge.net/doc/sdccman.pdf\#section.1.1}{\texttt{ http\+://sdcc.\+sourceforge.\+net/doc/sdccman.\+pdf\#section.\+1.\+1}}
+
+\label{docs_toolchain_toolchain_changing_important_addresses}%
+\Hypertarget{docs_toolchain_toolchain_changing_important_addresses}%
+ \hypertarget{docs_toolchain_autotoc_md97}{}\doxysubsection{Changing Important Addresses}\label{docs_toolchain_autotoc_md97}
+It is possible to change some of the important addresses used by the toolchain at link time using the -\/Wl-\/g X\+XX=Y\+YY and =Wl-\/b X\+XX=Y\+YY flags (where X\+XX is the name of the data, and Y\+YY is the new address).
+
+\mbox{\hyperlink{docs_toolchain_lcc}{lcc}} will include the following linker defaults for \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} if they are not defined by the user.
+
+
+\begin{DoxyItemize}
+\item {\ttfamily \+\_\+shadow\+\_\+\+O\+AM}
+\begin{DoxyItemize}
+\item Location of sprite ram (requires 0x\+A0 bytes).
+\item Default {\ttfamily -\/Wl-\/g \+\_\+shadow\+\_\+\+O\+AM=0x\+C000}
+\end{DoxyItemize}
+\item {\ttfamily .S\+T\+A\+CK}
+\begin{DoxyItemize}
+\item Initial stack address
+\item Default {\ttfamily -\/Wl-\/g .S\+T\+A\+CK=0x\+E000}
+\end{DoxyItemize}
+\item {\ttfamily .refresh\+\_\+\+O\+AM}
+\begin{DoxyItemize}
+\item Address to which the routine for refreshing O\+AM will be copied (must be in H\+I\+R\+AM). Default
+\item Default {\ttfamily -\/Wl-\/g .refresh\+\_\+\+O\+AM=0x\+F\+F80}
+\end{DoxyItemize}
+\item {\ttfamily \+\_\+\+D\+A\+TA}
+\begin{DoxyItemize}
+\item Start of R\+AM section (starts after Shadow O\+AM)
+\item Default {\ttfamily -\/Wl-\/b \+\_\+\+D\+A\+TA=0xc0\+A0}
+\end{DoxyItemize}
+\item {\ttfamily \+\_\+\+C\+O\+DE}
+\begin{DoxyItemize}
+\item Start of R\+OM section
+\item Default {\ttfamily -\/Wl-\/b \+\_\+\+C\+O\+DE=0x0200}
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_toolchain_toolchain_compiling_programs}%
+\Hypertarget{docs_toolchain_toolchain_compiling_programs}%
+\hypertarget{docs_toolchain_autotoc_md98}{}\doxysubsection{Compiling programs}\label{docs_toolchain_autotoc_md98}
+The \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} program is the front end compiler driver for the actual compiler, assembler and linker. It works out what you want to do based on command line options and the extensions of the files you give it, computes the order in which the various programs must be called and then executes them in order. Some examples are\+:
+
+
+\begin{DoxyItemize}
+\item Compile the C source \textquotesingle{}source.\+c\textquotesingle{}, assemble and link it producing the Gameboy image \textquotesingle{}image.\+gb\textquotesingle{} \begin{DoxyVerb}lcc -o image.gb source.c
+\end{DoxyVerb}
+
+\item Assemble the file \textquotesingle{}source.\+s\textquotesingle{} and link it producing the Gameboy image \textquotesingle{}image.\+gb\textquotesingle{} \begin{DoxyVerb}lcc -o image.gb source.s
+\end{DoxyVerb}
+
+\item Compile the C program \textquotesingle{}source1.\+c\textquotesingle{} and assemble it producing the object file \textquotesingle{}object1.\+o\textquotesingle{} for later linking. \begin{DoxyVerb}lcc -c -o object1.o source1.c
+\end{DoxyVerb}
+
+\item Assemble the file \textquotesingle{}source2.\+s\textquotesingle{} producing the object file \textquotesingle{}object2.\+o\textquotesingle{} for later linking \begin{DoxyVerb}lcc -c -o object2.o source2.s
+\end{DoxyVerb}
+
+\item Link the two object files \textquotesingle{}object1.\+o\textquotesingle{} and \textquotesingle{}object2.\+o\textquotesingle{} and produce the Gameboy image \textquotesingle{}image.\+gb\textquotesingle{} \begin{DoxyVerb}lcc -o image.gb object1.o object2.o
+\end{DoxyVerb}
+
+\item Do all sorts of clever stuff by compiling then assembling source1.\+c, assembling source2.\+s and then linking them together to produce image.\+gb. \begin{DoxyVerb}lcc -o image.gb source1.c source2.s
+\end{DoxyVerb}
+
+\end{DoxyItemize}
+
+Arguments to the assembler etc can be passed via lcc using -\/Wp..., -\/Wf..., -\/Wa... and -\/Wl... to pass options to the pre-\/processor, compiler, assembler and linker respectivly. Some common options are\+:
+
+
+\begin{DoxyItemize}
+\item To generate an assembler listing file. \begin{DoxyVerb}-Wa-l
+\end{DoxyVerb}
+
+\item To generate a linker map file. \begin{DoxyVerb}-Wl-m
+\end{DoxyVerb}
+
+\item To bind var to address \textquotesingle{}addr\textquotesingle{} at link time. \begin{DoxyVerb}-Wl-gvar=addr
+\end{DoxyVerb}
+
+\end{DoxyItemize}
+
+For example, to compile the example in the memory section and to generate a listing and map file you would use the following. Note the leading underscore that C adds to symbol names. \begin{DoxyVerb}lcc -Wa-l -Wl-m -Wl-g_snd_stat=0xff26 -o image.gb hardware.c
+\end{DoxyVerb}
+\hypertarget{docs_toolchain_Makefiles}{}\doxysubsubsection{Makefiles}\label{docs_toolchain_Makefiles}
+Using Makefiles
+
+Please see the sample projects included with G\+B\+D\+K-\/2020 for a couple different examples of how to use Makefiles.
+
+You may also want to read a tutorial on Makefiles. For example\+: ~\newline
+ \href{https://makefiletutorial.com/}{\texttt{ https\+://makefiletutorial.\+com/}} \href{https://www.tutorialspoint.com/makefile/index.htm}{\texttt{ https\+://www.\+tutorialspoint.\+com/makefile/index.\+htm}}
+
+\label{docs_toolchain_build_tools}%
+\Hypertarget{docs_toolchain_build_tools}%
+\hypertarget{docs_toolchain_autotoc_md99}{}\doxysubsection{Build Tools}\label{docs_toolchain_autotoc_md99}
+\label{docs_toolchain_lcc}%
+\Hypertarget{docs_toolchain_lcc}%
+\hypertarget{docs_toolchain_autotoc_md100}{}\doxysubsubsection{lcc}\label{docs_toolchain_autotoc_md100}
+lcc is the compiler driver (front end) for the G\+B\+D\+K/sdcc toolchain.
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_lcc-settings}{lcc-\/settings}}
+
+It can be used to invoke all the tools needed for building a rom. If preferred, the individual tools can be called directly.
+\begin{DoxyItemize}
+\item the {\ttfamily -\/v} flag can be used to show the exact steps lcc executes for a build
+\item lcc can compile, link and generate a binary in a single pass\+: {\ttfamily lcc -\/o somerom.\+gb somesource.\+c}
+\item \label{docs_toolchain_lcc_debug}%
+\Hypertarget{docs_toolchain_lcc_debug}%
+ lcc now has a {\ttfamily -\/debug} flag that will turn on the following recommended flags for debugging
+\begin{DoxyItemize}
+\item {\ttfamily -\/-\/debug} for sdcc (lcc equiv\+: {\ttfamily -\/Wf-\/debug})
+\item {\ttfamily -\/y} enables .cdb output for \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} (lcc equiv\+: {\ttfamily -\/Wl-\/y})
+\item {\ttfamily -\/j} enables .noi output for \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} (lcc equiv\+: {\ttfamily -\/Wl-\/j})
+\end{DoxyItemize}
+\end{DoxyItemize}
+
+\label{docs_toolchain_sdcc}%
+\Hypertarget{docs_toolchain_sdcc}%
+\hypertarget{docs_toolchain_autotoc_md101}{}\doxysubsubsection{sdcc}\label{docs_toolchain_autotoc_md101}
+S\+D\+CC C Source compiler
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_sdcc-settings}{sdcc-\/settings}}
+
+
+\begin{DoxyItemize}
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wf-\/$<$argument$>$} and {\ttfamily -\/Wp-\/$<$argument$>$} (pre-\/processor)
+\end{DoxyItemize}
+
+\label{docs_toolchain_sdasgb}%
+\Hypertarget{docs_toolchain_sdasgb}%
+\hypertarget{docs_toolchain_autotoc_md102}{}\doxysubsubsection{sdasgb}\label{docs_toolchain_autotoc_md102}
+S\+D\+CC Assembler for the gameboy
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_sdasgb-settings}{sdasgb-\/settings}}
+
+
+\begin{DoxyItemize}
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wa-\/$<$argument$>$}
+\end{DoxyItemize}
+
+\label{docs_toolchain_bankpack}%
+\Hypertarget{docs_toolchain_bankpack}%
+\hypertarget{docs_toolchain_autotoc_md103}{}\doxysubsubsection{bankpack}\label{docs_toolchain_autotoc_md103}
+Automatic Bank packer
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_bankpack-settings}{bankpack-\/settings}}
+
+When enabled, automatically assigns banks for object files where bank has been set to {\ttfamily 255}, see \mbox{\hyperlink{docs_rombanking_mbcs_rom_autobanking}{rom\+\_\+autobanking}}. Unless an alternative output is specified the given object files are updated with the new bank numbers.
+\begin{DoxyItemize}
+\item Can be enabled by using the {\ttfamily -\/autobank} argument with \mbox{\hyperlink{docs_toolchain_lcc}{lcc}}.
+\item Must be called after compiling/assembling and before linking
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wb-\/$<$argument$>$}
+\end{DoxyItemize}
+
+\label{docs_toolchain_sdldgb}%
+\Hypertarget{docs_toolchain_sdldgb}%
+\hypertarget{docs_toolchain_autotoc_md104}{}\doxysubsubsection{sdldgb}\label{docs_toolchain_autotoc_md104}
+The S\+D\+CC linker for the gameboy.
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_sdldgb-settings}{sdldgb-\/settings}}
+
+Links object files (.o) into a .ihx file which can be processed by \mbox{\hyperlink{docs_toolchain_makebin}{makebin}}
+\begin{DoxyItemize}
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wl-\/$<$argument$>$}
+\end{DoxyItemize}
+
+\label{docs_toolchain_ihxcheck}%
+\Hypertarget{docs_toolchain_ihxcheck}%
+\hypertarget{docs_toolchain_autotoc_md105}{}\doxysubsubsection{ihxcheck}\label{docs_toolchain_autotoc_md105}
+I\+HX file validator
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_ihxcheck-settings}{ihxcheck-\/settings}}
+
+Checks .ihx files produced by \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} for correctness.
+\begin{DoxyItemize}
+\item It will warn if there are multiple writes to the same R\+OM address. This may indicate mistakes in the code or R\+OM bank overflows
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wi-\/$<$argument$>$}
+\end{DoxyItemize}
+
+\label{docs_toolchain_makebin}%
+\Hypertarget{docs_toolchain_makebin}%
+\hypertarget{docs_toolchain_autotoc_md106}{}\doxysubsubsection{makebin}\label{docs_toolchain_autotoc_md106}
+I\+HX to R\+OM converter
+
+
+\begin{DoxyItemize}
+\item For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_makebin-settings}{makebin-\/settings}}
+\item For makebin {\ttfamily -\/yt} M\+BC values see \mbox{\hyperlink{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}{setting\+\_\+mbc\+\_\+and\+\_\+rom\+\_\+ram\+\_\+banks}}
+\end{DoxyItemize}
+
+Converts .ihx files produced by \mbox{\hyperlink{docs_toolchain_sdldgb}{sdldgb}} into R\+OM files (.gb, .gbc). Also used for setting some R\+OM header data.
+\begin{DoxyItemize}
+\item Arguments can be passed to it through \mbox{\hyperlink{docs_toolchain_lcc}{lcc}} using {\ttfamily -\/Wm-\/$<$argument$>$}
+\end{DoxyItemize}
+
+\label{docs_toolchain_gbdk_utilities}%
+\Hypertarget{docs_toolchain_gbdk_utilities}%
+\hypertarget{docs_toolchain_autotoc_md107}{}\doxysubsection{G\+B\+D\+K Utilities}\label{docs_toolchain_autotoc_md107}
+\label{docs_toolchain_utility_gbcompress}%
+\Hypertarget{docs_toolchain_utility_gbcompress}%
+\hypertarget{docs_toolchain_autotoc_md108}{}\doxysubsubsection{G\+B\+Compress}\label{docs_toolchain_autotoc_md108}
+Compresssion utility
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_gbcompress-settings}{gbcompress-\/settings}}
+
+Compresses (and decompresses) binary file data with the gbcompress algorithm (also used in G\+B\+T\+D/\+G\+B\+MB). Decompression support is available in G\+B\+DK, see \mbox{\hyperlink{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}{gb\+\_\+decompress()}}.
+
+Can also compress (and decompress) using block style rle encoding with the {\ttfamily -\/-\/alg=rle} flag. Decompression support is available in G\+B\+DK, see \mbox{\hyperlink{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}{rle\+\_\+decompress()}}.
+
+\label{docs_toolchain_utility_png2asset}%
+\Hypertarget{docs_toolchain_utility_png2asset}%
+\hypertarget{docs_toolchain_autotoc_md109}{}\doxysubsubsection{png2asset}\label{docs_toolchain_autotoc_md109}
+Tool for converting P\+N\+Gs into G\+B\+DK format Meta\+Sprites and Tile Maps
+
+
+\begin{DoxyItemize}
+\item Convert single or multiple frames of graphics into metasprite structured data for use with the ...metasprite...() functions.
+\item When {\ttfamily -\/map} is used, converts images into Tile Maps and matching Tile Sets
+\item Supports Game Boy 2bpp, G\+BC 4bpp, S\+GB 4bpp, and S\+M\+S/\+GG 4bpp
+\end{DoxyItemize}
+
+For detailed settings see \mbox{\hyperlink{docs_toolchain_settings_png2asset-settings}{png2asset-\/settings}} ~\newline
+ For working with sprite properties (including cgb palettes), see \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{metasprite\+\_\+and\+\_\+sprite\+\_\+properties}} ~\newline
+ For A\+PI support see \mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}} and related functions in \mbox{\hyperlink{sms_2metasprites_8h}{metasprites.\+h}} ~\newline
+\hypertarget{docs_toolchain_autotoc_md110}{}\doxyparagraph{Working with png2asset}\label{docs_toolchain_autotoc_md110}
+
+\begin{DoxyItemize}
+\item The origin (pivot) for the metasprite is not required to be in the upper left-\/hand corner as with regular hardware sprites. See {\ttfamily -\/px} and {\ttfamily -\/py}.
+\item The conversion process supports using both S\+P\+R\+I\+T\+E\+S\+\_\+8x8 ({\ttfamily -\/spr8x8}) and S\+P\+R\+I\+T\+E\+S\+\_\+8x16 mode ({\ttfamily -\/spr8x16}). If 8x16 mode is used then the height of the metasprite must be a multiple of 16.
+\end{DoxyItemize}\hypertarget{docs_toolchain_autotoc_md111}{}\doxysubparagraph{Terminology}\label{docs_toolchain_autotoc_md111}
+The following abbreviations are used in this section\+:
+\begin{DoxyItemize}
+\item Original Game Boy and Game Boy Pocket style hardware\+: {\ttfamily D\+MG}
+\item Game Boy Color\+: {\ttfamily C\+GB}
+\end{DoxyItemize}\hypertarget{docs_toolchain_autotoc_md112}{}\doxysubparagraph{Conversion Process}\label{docs_toolchain_autotoc_md112}
+png2asset accepts any png as input, although that does not mean any image will be valid. The program will follow the next steps\+:
+\begin{DoxyItemize}
+\item The image will be subdivided into tiles of 8x8 or 8x16
+\item For each tile a palette will be generated
+\item If there are more than 4 colors in the palette it will throw an error
+\item The palette will be sorted from darkest to lightest. If there is a transparent color that will be the first one (this will create a palette that will also work with {\ttfamily D\+MG} devices)
+\item If there are more than 8 palettes the program will throw an error
+\end{DoxyItemize}
+
+With all this, the program will generate a new indexed image (with palette), where each 4 colors define a palette and all colors within a tile can only have colors from one of these palettes
+
+It is also posible to pass a indexed 8-\/bit png with the palette properly sorted out, using {\ttfamily -\/keep\+\_\+palette\+\_\+order}
+\begin{DoxyItemize}
+\item Palettes will be extracted from the image palette in groups of 4 colors.
+\item Each tile can only have colors from one of these palettes per tile
+\item The maximum number of colors is 32
+\end{DoxyItemize}
+
+Using this image a tileset will be created
+\begin{DoxyItemize}
+\item Duplicated tiles will be removed
+\item Tiles will be matched without mirror, using vertical mirror, horizontal mirror or both (use {\ttfamily -\/noflip} to turn off matching mirrored tiles)
+\item The palette won\textquotesingle{}t be taken into account for matching, only the pixel color order, meaning there will be a match between tiles using different palettes but looking identical on grayscale
+\end{DoxyItemize}\hypertarget{docs_toolchain_autotoc_md113}{}\doxysubparagraph{Maps}\label{docs_toolchain_autotoc_md113}
+Passing {\ttfamily -\/map} the png can be converted to a map that can be used in both the background and the window. In this case, png2asset will generate\+:
+\begin{DoxyItemize}
+\item The palettes
+\item The tileset
+\item The map
+\item The color info
+\begin{DoxyItemize}
+\item By default, an array of palette index for each tile. This is not the way the hardware works but it takes less space and will create maps compatibles with both {\ttfamily D\+MG} and {\ttfamily C\+GB} devices.
+\item Passing {\ttfamily -\/use\+\_\+map\+\_\+attributes} will create an array of map attributes. It will also add mirroring info for each tile and because of that maps created with this won\textquotesingle{}t be compatible with.
+\begin{DoxyItemize}
+\item Use {\ttfamily -\/noflip} to make background maps which are compatible with {\ttfamily D\+MG} devices.
+\end{DoxyItemize}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_toolchain_autotoc_md114}{}\doxysubparagraph{Meta sprites}\label{docs_toolchain_autotoc_md114}
+By default the png will be converted to metasprites. The image will be subdivided into meta sprites of {\ttfamily -\/sw} x {\ttfamily -\/sh}. In this case png2asset will generate\+:
+\begin{DoxyItemize}
+\item The metasprites, containing an array of\+:
+\begin{DoxyItemize}
+\item tile index
+\item y offset
+\item x offset
+\item flags, containing the mirror info, the palettes for both D\+MG and G\+BC and the sprite priority
+\end{DoxyItemize}
+\item The metasprites array
+\end{DoxyItemize}\hypertarget{docs_toolchain_autotoc_md115}{}\doxysubparagraph{Super Game Boy Borders (\+S\+G\+B)}\label{docs_toolchain_autotoc_md115}
+Screen border assets for the Super Game Boy can be generated using png2asset.
+
+The following flags should be used to perform the conversion\+:
+\begin{DoxyItemize}
+\item {\ttfamily $<$input\+\_\+border\+\_\+file.\+png$>$ -\/map -\/bpp 4 -\/max\+\_\+palettes 4 -\/pack\+\_\+mode sgb -\/use\+\_\+map\+\_\+attributes -\/c $<$output\+\_\+border\+\_\+data.\+c$>$}
+\item Where {\ttfamily $<$input\+\_\+border\+\_\+file.\+png$>$} is the image of the S\+GB border (256x224) and {\ttfamily $<$output\+\_\+border\+\_\+data.\+c$>$} is the name of the source file to write the assets out to.
+\end{DoxyItemize}
+
+See the {\ttfamily sgb\+\_\+border} example project for more details.
\ No newline at end of file
diff --git a/docs/latex/docs_toolchain_settings.tex b/docs/latex/docs_toolchain_settings.tex
new file mode 100644
index 00000000..82842aae
--- /dev/null
+++ b/docs/latex/docs_toolchain_settings.tex
@@ -0,0 +1,500 @@
+\label{docs_toolchain_settings_lcc-settings}%
+\Hypertarget{docs_toolchain_settings_lcc-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md206}{}\doxysubsection{lcc settings}\label{docs_toolchain_settings_autotoc_md206}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{./lcc [ option | file ]...}
+\DoxyCodeLine{ except for -\/l, options are processed left-\/to-\/right before files}
+\DoxyCodeLine{ unrecognized options are taken to be linker options}
+\DoxyCodeLine{-\/A warn about nonANSI usage; 2nd -\/A warns more}
+\DoxyCodeLine{-\/b emit expression-\/level profiling code; see bprint(1)}
+\DoxyCodeLine{-\/Bdir/ use the compiler named `dir/rcc'}
+\DoxyCodeLine{-\/c compile only}
+\DoxyCodeLine{-\/dn set switch statement density to `n'}
+\DoxyCodeLine{-\/debug Turns on -\/-\/debug for compiler, -\/y (.cdb) and -\/j (.noi) for linker}
+\DoxyCodeLine{-\/Dname -\/Dname=def define the preprocessor symbol `name'}
+\DoxyCodeLine{-\/E run only the preprocessor on the named C programs and unsuffixed files}
+\DoxyCodeLine{-\/g produce symbol table information for debuggers}
+\DoxyCodeLine{-\/help or -\/? print this message}
+\DoxyCodeLine{-\/Idir add `dir' to the beginning of the list of \#include directories}
+\DoxyCodeLine{-\/K don't run ihxcheck test on linker ihx output}
+\DoxyCodeLine{-\/lx search library `x'}
+\DoxyCodeLine{-\/m select port and platform: "{}-\/m[port]:[plat]"{} ports:gbz80,z80 plats:ap,duck,gb,sms,gg}
+\DoxyCodeLine{-\/N do not search the standard directories for \#include files}
+\DoxyCodeLine{-\/n emit code to check for dereferencing zero pointers}
+\DoxyCodeLine{-\/no-\/crt do not auto-\/include the gbdk crt0.o runtime in linker list}
+\DoxyCodeLine{-\/no-\/libs do not auto-\/include the gbdk libs in linker list}
+\DoxyCodeLine{-\/O is ignored}
+\DoxyCodeLine{-\/o file leave the output in `file'}
+\DoxyCodeLine{-\/P print ANSI-\/style declarations for globals}
+\DoxyCodeLine{-\/p -\/pg emit profiling code; see prof(1) and gprof(1)}
+\DoxyCodeLine{-\/S compile to assembly language}
+\DoxyCodeLine{-\/autobank auto-\/assign banks set to 255 (bankpack)}
+\DoxyCodeLine{-\/static specify static libraries (default is dynamic)}
+\DoxyCodeLine{-\/t -\/tname emit function tracing calls to printf or to `name'}
+\DoxyCodeLine{-\/target name is ignored}
+\DoxyCodeLine{-\/tempdir=dir place temporary files in `dir/'; default=/tmp}
+\DoxyCodeLine{-\/Uname undefine the preprocessor symbol `name'}
+\DoxyCodeLine{-\/v show commands as they are executed; 2nd -\/v suppresses execution}
+\DoxyCodeLine{-\/w suppress warnings}
+\DoxyCodeLine{-\/Woarg specify system-\/specific `arg'}
+\DoxyCodeLine{-\/W[pfablim]arg pass `arg' to the preprocessor, compiler, assembler, bankpack, linker, ihxcheck, or makebin}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_sdcc-settings}%
+\Hypertarget{docs_toolchain_settings_sdcc-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md207}{}\doxysubsection{sdcc settings}\label{docs_toolchain_settings_autotoc_md207}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{SDCC : z80/gbz80 4.1.6 \#12539 (Linux)}
+\DoxyCodeLine{published under GNU General Public License (GPL)}
+\DoxyCodeLine{Usage : sdcc [options] filename}
+\DoxyCodeLine{Options :-\/}
+\DoxyCodeLine{}
+\DoxyCodeLine{General options:}
+\DoxyCodeLine{ -\/-\/help Display this help}
+\DoxyCodeLine{ -\/v -\/-\/version Display sdcc's version}
+\DoxyCodeLine{ -\/-\/verbose Trace calls to the preprocessor, assembler, and linker}
+\DoxyCodeLine{ -\/V Execute verbosely. Show sub commands as they are run}
+\DoxyCodeLine{ -\/d Output list of macro definitions in effect. Use with -\/E}
+\DoxyCodeLine{ -\/D Define macro as in -\/Dmacro}
+\DoxyCodeLine{ -\/I Add to the include (*.h) path, as in -\/Ipath}
+\DoxyCodeLine{ -\/A }
+\DoxyCodeLine{ -\/U Undefine macro as in -\/Umacro}
+\DoxyCodeLine{ -\/M Preprocessor option}
+\DoxyCodeLine{ -\/W Pass through options to the pre-\/processor (p), assembler (a) or linker (l)}
+\DoxyCodeLine{ -\/S Compile only; do not assemble or link}
+\DoxyCodeLine{ -\/c -\/-\/compile-\/only Compile and assemble, but do not link}
+\DoxyCodeLine{ -\/E -\/-\/preprocessonly Preprocess only, do not compile}
+\DoxyCodeLine{ -\/-\/c1mode Act in c1 mode. The standard input is preprocessed code, the output is assembly code.}
+\DoxyCodeLine{ -\/o Place the output into the given path resp. file}
+\DoxyCodeLine{ -\/x Optional file type override (c, c-\/header or none), valid until the next -\/x}
+\DoxyCodeLine{ -\/-\/print-\/search-\/dirs display the directories in the compiler's search path}
+\DoxyCodeLine{ -\/-\/vc messages are compatible with Micro\$oft visual studio}
+\DoxyCodeLine{ -\/-\/use-\/stdout send errors to stdout instead of stderr}
+\DoxyCodeLine{ -\/-\/nostdlib Do not include the standard library directory in the search path}
+\DoxyCodeLine{ -\/-\/nostdinc Do not include the standard include directory in the search path}
+\DoxyCodeLine{ -\/-\/less-\/pedantic Disable some of the more pedantic warnings}
+\DoxyCodeLine{ -\/-\/disable-\/warning Disable specific warning}
+\DoxyCodeLine{ -\/-\/Werror Treat the warnings as errors}
+\DoxyCodeLine{ -\/-\/debug Enable debugging symbol output}
+\DoxyCodeLine{ -\/-\/cyclomatic Display complexity of compiled functions}
+\DoxyCodeLine{ -\/-\/std-\/c89 Use ISO C90 (aka ANSI C89) standard (slightly incomplete)}
+\DoxyCodeLine{ -\/-\/std-\/sdcc89 Use ISO C90 (aka ANSI C89) standard with SDCC extensions}
+\DoxyCodeLine{ -\/-\/std-\/c95 Use ISO C95 (aka ISO C94) standard (slightly incomplete)}
+\DoxyCodeLine{ -\/-\/std-\/c99 Use ISO C99 standard (incomplete)}
+\DoxyCodeLine{ -\/-\/std-\/sdcc99 Use ISO C99 standard with SDCC extensions}
+\DoxyCodeLine{ -\/-\/std-\/c11 Use ISO C11 standard (incomplete)}
+\DoxyCodeLine{ -\/-\/std-\/sdcc11 Use ISO C11 standard with SDCC extensions (default)}
+\DoxyCodeLine{ -\/-\/std-\/c2x Use ISO C2X standard (incomplete)}
+\DoxyCodeLine{ -\/-\/std-\/sdcc2x Use ISO C2X standard with SDCC extensions}
+\DoxyCodeLine{ -\/-\/fdollars-\/in-\/identifiers Permit '\$' as an identifier character}
+\DoxyCodeLine{ -\/-\/fsigned-\/char Make "{}char"{} signed by default}
+\DoxyCodeLine{ -\/-\/use-\/non-\/free Search / include non-\/free licensed libraries and header files}
+\DoxyCodeLine{}
+\DoxyCodeLine{Code generation options:}
+\DoxyCodeLine{ -\/m Set the port to use e.g. -\/mz80.}
+\DoxyCodeLine{ -\/p Select port specific processor e.g. -\/mpic14 -\/p16f84}
+\DoxyCodeLine{ -\/-\/stack-\/auto Stack automatic variables}
+\DoxyCodeLine{ -\/-\/xstack Use external stack}
+\DoxyCodeLine{ -\/-\/int-\/long-\/reent Use reentrant calls on the int and long support functions}
+\DoxyCodeLine{ -\/-\/float-\/reent Use reentrant calls on the float support functions}
+\DoxyCodeLine{ -\/-\/xram-\/movc Use movc instead of movx to read xram (xdata)}
+\DoxyCodeLine{ -\/-\/callee-\/saves Cause the called function to save registers instead of the caller}
+\DoxyCodeLine{ -\/-\/profile On supported ports, generate extra profiling information}
+\DoxyCodeLine{ -\/-\/fomit-\/frame-\/pointer Leave out the frame pointer.}
+\DoxyCodeLine{ -\/-\/all-\/callee-\/saves callee will always save registers used}
+\DoxyCodeLine{ -\/-\/stack-\/probe insert call to function \_\_stack\_probe at each function prologue}
+\DoxyCodeLine{ -\/-\/no-\/xinit-\/opt don't memcpy initialized xram from code}
+\DoxyCodeLine{ -\/-\/no-\/c-\/code-\/in-\/asm don't include c-\/code as comments in the asm file}
+\DoxyCodeLine{ -\/-\/no-\/peep-\/comments don't include peephole optimizer comments}
+\DoxyCodeLine{ -\/-\/codeseg use this name for the code segment}
+\DoxyCodeLine{ -\/-\/constseg use this name for the const segment}
+\DoxyCodeLine{ -\/-\/dataseg use this name for the data segment}
+\DoxyCodeLine{}
+\DoxyCodeLine{Optimization options:}
+\DoxyCodeLine{ -\/-\/nooverlay Disable overlaying leaf function auto variables}
+\DoxyCodeLine{ -\/-\/nogcse Disable the GCSE optimisation}
+\DoxyCodeLine{ -\/-\/nolabelopt Disable label optimisation}
+\DoxyCodeLine{ -\/-\/noinvariant Disable optimisation of invariants}
+\DoxyCodeLine{ -\/-\/noinduction Disable loop variable induction}
+\DoxyCodeLine{ -\/-\/noloopreverse Disable the loop reverse optimisation}
+\DoxyCodeLine{ -\/-\/no-\/peep Disable the peephole assembly file optimisation}
+\DoxyCodeLine{ -\/-\/no-\/reg-\/params On some ports, disable passing some parameters in registers}
+\DoxyCodeLine{ -\/-\/peep-\/asm Enable peephole optimization on inline assembly}
+\DoxyCodeLine{ -\/-\/peep-\/return Enable peephole optimization for return instructions}
+\DoxyCodeLine{ -\/-\/no-\/peep-\/return Disable peephole optimization for return instructions}
+\DoxyCodeLine{ -\/-\/peep-\/file use this extra peephole file}
+\DoxyCodeLine{ -\/-\/opt-\/code-\/speed Optimize for code speed rather than size}
+\DoxyCodeLine{ -\/-\/opt-\/code-\/size Optimize for code size rather than speed}
+\DoxyCodeLine{ -\/-\/max-\/allocs-\/per-\/node Maximum number of register assignments considered at each node of the tree decomposition}
+\DoxyCodeLine{ -\/-\/nolospre Disable lospre}
+\DoxyCodeLine{ -\/-\/allow-\/unsafe-\/read Allow optimizations to read any memory location anytime}
+\DoxyCodeLine{ -\/-\/nostdlibcall Disable optimization of calls to standard library}
+\DoxyCodeLine{}
+\DoxyCodeLine{Internal debugging options:}
+\DoxyCodeLine{ -\/-\/dump-\/ast Dump front-\/end AST before generating i-\/code}
+\DoxyCodeLine{ -\/-\/dump-\/i-\/code Dump the i-\/code structure at all stages}
+\DoxyCodeLine{ -\/-\/dump-\/graphs Dump graphs (control-\/flow, conflict, etc)}
+\DoxyCodeLine{ -\/-\/i-\/code-\/in-\/asm Include i-\/code as comments in the asm file}
+\DoxyCodeLine{ -\/-\/fverbose-\/asm Include code generator comments in the asm output}
+\DoxyCodeLine{}
+\DoxyCodeLine{Linker options:}
+\DoxyCodeLine{ -\/l Include the given library in the link}
+\DoxyCodeLine{ -\/L Add the next field to the library search path}
+\DoxyCodeLine{ -\/-\/lib-\/path use this path to search for libraries}
+\DoxyCodeLine{ -\/-\/out-\/fmt-\/ihx Output in Intel hex format}
+\DoxyCodeLine{ -\/-\/out-\/fmt-\/s19 Output in S19 hex format}
+\DoxyCodeLine{ -\/-\/xram-\/loc External Ram start location}
+\DoxyCodeLine{ -\/-\/xram-\/size External Ram size}
+\DoxyCodeLine{ -\/-\/iram-\/size Internal Ram size}
+\DoxyCodeLine{ -\/-\/xstack-\/loc External Stack start location}
+\DoxyCodeLine{ -\/-\/code-\/loc Code Segment Location}
+\DoxyCodeLine{ -\/-\/code-\/size Code Segment size}
+\DoxyCodeLine{ -\/-\/stack-\/loc Stack pointer initial value}
+\DoxyCodeLine{ -\/-\/data-\/loc Direct data start location}
+\DoxyCodeLine{ -\/-\/idata-\/loc }
+\DoxyCodeLine{ -\/-\/no-\/optsdcc-\/in-\/asm Do not emit .optsdcc in asm}
+\DoxyCodeLine{}
+\DoxyCodeLine{Special options for the z80 port:}
+\DoxyCodeLine{ -\/-\/callee-\/saves-\/bc Force a called function to always save BC}
+\DoxyCodeLine{ -\/-\/portmode= Determine PORT I/O mode (z80/z180)}
+\DoxyCodeLine{ -\/-\/asm= Define assembler name (rgbds/asxxxx/isas/z80asm/gas)}
+\DoxyCodeLine{ -\/-\/codeseg use this name for the code segment}
+\DoxyCodeLine{ -\/-\/constseg use this name for the const segment}
+\DoxyCodeLine{ -\/-\/dataseg use this name for the data segment}
+\DoxyCodeLine{ -\/-\/no-\/std-\/crt0 For the z80/gbz80 do not link default crt0.rel}
+\DoxyCodeLine{ -\/-\/reserve-\/regs-\/iy Do not use IY (incompatible with -\/-\/fomit-\/frame-\/pointer)}
+\DoxyCodeLine{ -\/-\/oldralloc Use old register allocator (deprecated)}
+\DoxyCodeLine{ -\/-\/fno-\/omit-\/frame-\/pointer Do not omit frame pointer}
+\DoxyCodeLine{ -\/-\/emit-\/externs Emit externs list in generated asm}
+\DoxyCodeLine{ -\/-\/legacy-\/banking Use legacy method to call banked functions}
+\DoxyCodeLine{ -\/-\/nmos-\/z80 Generate workaround for NMOS Z80 when saving IFF2}
+\DoxyCodeLine{}
+\DoxyCodeLine{Special options for the gbz80 port:}
+\DoxyCodeLine{ -\/bo use code bank }
+\DoxyCodeLine{ -\/ba use data bank }
+\DoxyCodeLine{ -\/-\/asm= Define assembler name (rgbds/asxxxx/isas/z80asm/gas)}
+\DoxyCodeLine{ -\/-\/callee-\/saves-\/bc Force a called function to always save BC}
+\DoxyCodeLine{ -\/-\/codeseg use this name for the code segment}
+\DoxyCodeLine{ -\/-\/constseg use this name for the const segment}
+\DoxyCodeLine{ -\/-\/dataseg use this name for the data segment}
+\DoxyCodeLine{ -\/-\/no-\/std-\/crt0 For the z80/gbz80 do not link default crt0.rel}
+\DoxyCodeLine{ -\/-\/legacy-\/banking Use legacy method to call banked functions}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_sdasgb-settings}%
+\Hypertarget{docs_toolchain_settings_sdasgb-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md208}{}\doxysubsection{sdasgb settings}\label{docs_toolchain_settings_autotoc_md208}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{sdas Assembler V02.00 + NoICE + SDCC mods (GameBoy Z80-\/like CPU)}
+\DoxyCodeLine{}
+\DoxyCodeLine{}
+\DoxyCodeLine{Copyright (C) 2012 Alan R. Baldwin}
+\DoxyCodeLine{This program comes with ABSOLUTELY NO WARRANTY.}
+\DoxyCodeLine{}
+\DoxyCodeLine{Usage: [-\/Options] file}
+\DoxyCodeLine{Usage: [-\/Options] outfile file1 [file2 file3 ...]}
+\DoxyCodeLine{ -\/d Decimal listing}
+\DoxyCodeLine{ -\/q Octal listing}
+\DoxyCodeLine{ -\/x Hex listing (default)}
+\DoxyCodeLine{ -\/g Undefined symbols made global}
+\DoxyCodeLine{ -\/n Don't resolve global assigned value symbols}
+\DoxyCodeLine{ -\/a All user symbols made global}
+\DoxyCodeLine{ -\/b Display .define substitutions in listing}
+\DoxyCodeLine{ -\/bb and display without .define substitutions}
+\DoxyCodeLine{ -\/c Disable instruction cycle count in listing}
+\DoxyCodeLine{ -\/j Enable NoICE Debug Symbols}
+\DoxyCodeLine{ -\/y Enable SDCC Debug Symbols}
+\DoxyCodeLine{ -\/l Create list file/outfile[.lst]}
+\DoxyCodeLine{ -\/o Create object file/outfile[.rel]}
+\DoxyCodeLine{ -\/s Create symbol file/outfile[.sym]}
+\DoxyCodeLine{ -\/p Disable automatic listing pagination}
+\DoxyCodeLine{ -\/u Disable .list/.nlist processing}
+\DoxyCodeLine{ -\/w Wide listing format for symbol table}
+\DoxyCodeLine{ -\/z Disable case sensitivity for symbols}
+\DoxyCodeLine{ -\/f Flag relocatable references by ` in listing file}
+\DoxyCodeLine{ -\/ff Flag relocatable references by mode in listing file}
+\DoxyCodeLine{ -\/I Add the named directory to the include file}
+\DoxyCodeLine{ search path. This option may be used more than once.}
+\DoxyCodeLine{ Directories are searched in the order given.}
+\DoxyCodeLine{}
+\DoxyCodeLine{removing }
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_sdasz80-settings}%
+\Hypertarget{docs_toolchain_settings_sdasz80-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md209}{}\doxysubsection{sdasz80 settings}\label{docs_toolchain_settings_autotoc_md209}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{sdas Assembler V02.00 + NoICE + SDCC mods (GameBoy Z80-\/like CPU)}
+\DoxyCodeLine{}
+\DoxyCodeLine{}
+\DoxyCodeLine{Copyright (C) 2012 Alan R. Baldwin}
+\DoxyCodeLine{This program comes with ABSOLUTELY NO WARRANTY.}
+\DoxyCodeLine{}
+\DoxyCodeLine{Usage: [-\/Options] file}
+\DoxyCodeLine{Usage: [-\/Options] outfile file1 [file2 file3 ...]}
+\DoxyCodeLine{ -\/d Decimal listing}
+\DoxyCodeLine{ -\/q Octal listing}
+\DoxyCodeLine{ -\/x Hex listing (default)}
+\DoxyCodeLine{ -\/g Undefined symbols made global}
+\DoxyCodeLine{ -\/n Don't resolve global assigned value symbols}
+\DoxyCodeLine{ -\/a All user symbols made global}
+\DoxyCodeLine{ -\/b Display .define substitutions in listing}
+\DoxyCodeLine{ -\/bb and display without .define substitutions}
+\DoxyCodeLine{ -\/c Disable instruction cycle count in listing}
+\DoxyCodeLine{ -\/j Enable NoICE Debug Symbols}
+\DoxyCodeLine{ -\/y Enable SDCC Debug Symbols}
+\DoxyCodeLine{ -\/l Create list file/outfile[.lst]}
+\DoxyCodeLine{ -\/o Create object file/outfile[.rel]}
+\DoxyCodeLine{ -\/s Create symbol file/outfile[.sym]}
+\DoxyCodeLine{ -\/p Disable automatic listing pagination}
+\DoxyCodeLine{ -\/u Disable .list/.nlist processing}
+\DoxyCodeLine{ -\/w Wide listing format for symbol table}
+\DoxyCodeLine{ -\/z Disable case sensitivity for symbols}
+\DoxyCodeLine{ -\/f Flag relocatable references by ` in listing file}
+\DoxyCodeLine{ -\/ff Flag relocatable references by mode in listing file}
+\DoxyCodeLine{ -\/I Add the named directory to the include file}
+\DoxyCodeLine{ search path. This option may be used more than once.}
+\DoxyCodeLine{ Directories are searched in the order given.}
+\DoxyCodeLine{}
+\DoxyCodeLine{removing }
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_bankpack-settings}%
+\Hypertarget{docs_toolchain_settings_bankpack-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md210}{}\doxysubsection{bankpack settings}\label{docs_toolchain_settings_autotoc_md210}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{bankalloc [options] objfile1 objfile2 etc}
+\DoxyCodeLine{Use: Read .o files and auto-\/assign areas with bank=255.}
+\DoxyCodeLine{ Typically called by Lcc compiler driver before linker.}
+\DoxyCodeLine{}
+\DoxyCodeLine{Options}
+\DoxyCodeLine{-\/h : Show this help}
+\DoxyCodeLine{-\/lkin= : Load object files specified in linker file }
+\DoxyCodeLine{-\/lkout=: Write list of object files out to linker file }
+\DoxyCodeLine{-\/yt : Set MBC type per ROM byte 149 in Decimal or Hex (0xNN) (see pandocs)}
+\DoxyCodeLine{-\/mbc=N : Similar to -\/yt, but sets MBC type directly to N instead}
+\DoxyCodeLine{ of by intepreting ROM byte 149}
+\DoxyCodeLine{ mbc1 will exclude banks \{0x20,0x40,0x60\} max=127, }
+\DoxyCodeLine{ mbc2 max=15, mbc3 max=127, mbc5 max=255 (not 511!) }
+\DoxyCodeLine{-\/min=N : Min assigned ROM bank is N (default 1)}
+\DoxyCodeLine{-\/max=N : Max assigned ROM bank is N, error if exceeded}
+\DoxyCodeLine{-\/ext=<.ext> : Write files out with <.ext> instead of source extension}
+\DoxyCodeLine{-\/path= : Write files out to ( *MUST* already exist)}
+\DoxyCodeLine{-\/sym=: Add symbols starting with to match + update list.}
+\DoxyCodeLine{ Default entry is "{}\_\_\_bank\_"{} (see below)}
+\DoxyCodeLine{-\/cartsize : Print min required cart size as "{}autocartsize:"{}}
+\DoxyCodeLine{-\/plat= : Select platform specific behavior (default:gb) (gb,sms)}
+\DoxyCodeLine{-\/random : Distribute banks randomly for testing (honors -\/min/-\/max)}
+\DoxyCodeLine{-\/v : Verbose output, show assignments}
+\DoxyCodeLine{}
+\DoxyCodeLine{Example: "{}bankpack -\/ext=.rel -\/path=some/newpath/ file1.o file2.o"{}}
+\DoxyCodeLine{Unless -\/ext or -\/path specify otherwise, input files are overwritten.}
+\DoxyCodeLine{}
+\DoxyCodeLine{Default MBC type is not set. It *must* be specified by -\/mbc= or -\/yt!}
+\DoxyCodeLine{}
+\DoxyCodeLine{The following will have FF and 255 replaced with the assigned bank:}
+\DoxyCodeLine{A \_CODE\_255 size flags addr }
+\DoxyCodeLine{S b\_ Def0000FF}
+\DoxyCodeLine{S \_\_\_bank\_ Def0000FF}
+\DoxyCodeLine{ (Above can be made by: const void \_\_at(255) \_\_bank\_;}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_sdldgb-settings}%
+\Hypertarget{docs_toolchain_settings_sdldgb-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md211}{}\doxysubsection{sdldgb settings}\label{docs_toolchain_settings_autotoc_md211}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{sdld Linker V03.00 + NoICE + sdld}
+\DoxyCodeLine{}
+\DoxyCodeLine{Usage: [-\/Options] [-\/Option with arg] file}
+\DoxyCodeLine{Usage: [-\/Options] [-\/Option with arg] outfile file1 [file2 ...]}
+\DoxyCodeLine{Startup:}
+\DoxyCodeLine{ -\/p Echo commands to stdout (default)}
+\DoxyCodeLine{ -\/n No echo of commands to stdout}
+\DoxyCodeLine{Alternates to Command Line Input:}
+\DoxyCodeLine{ -\/c ASlink >> prompt input}
+\DoxyCodeLine{ -\/f file[.lk] Command File input}
+\DoxyCodeLine{Libraries:}
+\DoxyCodeLine{ -\/k Library path specification, one per -\/k}
+\DoxyCodeLine{ -\/l Library file specification, one per -\/l}
+\DoxyCodeLine{Relocation:}
+\DoxyCodeLine{ -\/b area base address = expression}
+\DoxyCodeLine{ -\/g global symbol = expression}
+\DoxyCodeLine{ -\/a (platform) Select platform specific virtual address translation}
+\DoxyCodeLine{Map format:}
+\DoxyCodeLine{ -\/m Map output generated as (out)file[.map]}
+\DoxyCodeLine{ -\/w Wide listing format for map file}
+\DoxyCodeLine{ -\/x Hexadecimal (default)}
+\DoxyCodeLine{ -\/d Decimal}
+\DoxyCodeLine{ -\/q Octal}
+\DoxyCodeLine{Output:}
+\DoxyCodeLine{ -\/i Intel Hex as (out)file[.ihx]}
+\DoxyCodeLine{ -\/s Motorola S Record as (out)file[.s19]}
+\DoxyCodeLine{ -\/j NoICE Debug output as (out)file[.noi]}
+\DoxyCodeLine{ -\/y SDCDB Debug output as (out)file[.cdb]}
+\DoxyCodeLine{List:}
+\DoxyCodeLine{ -\/u Update listing file(s) with link data as file(s)[.rst]}
+\DoxyCodeLine{Case Sensitivity:}
+\DoxyCodeLine{ -\/z Disable Case Sensitivity for Symbols}
+\DoxyCodeLine{End:}
+\DoxyCodeLine{ -\/e or null line terminates input}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_sdldz80-settings}%
+\Hypertarget{docs_toolchain_settings_sdldz80-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md212}{}\doxysubsection{sdldz80 settings}\label{docs_toolchain_settings_autotoc_md212}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{sdld Linker V03.00 + NoICE + sdld}
+\DoxyCodeLine{}
+\DoxyCodeLine{Usage: [-\/Options] [-\/Option with arg] file}
+\DoxyCodeLine{Usage: [-\/Options] [-\/Option with arg] outfile file1 [file2 ...]}
+\DoxyCodeLine{Startup:}
+\DoxyCodeLine{ -\/p Echo commands to stdout (default)}
+\DoxyCodeLine{ -\/n No echo of commands to stdout}
+\DoxyCodeLine{Alternates to Command Line Input:}
+\DoxyCodeLine{ -\/c ASlink >> prompt input}
+\DoxyCodeLine{ -\/f file[.lk] Command File input}
+\DoxyCodeLine{Libraries:}
+\DoxyCodeLine{ -\/k Library path specification, one per -\/k}
+\DoxyCodeLine{ -\/l Library file specification, one per -\/l}
+\DoxyCodeLine{Relocation:}
+\DoxyCodeLine{ -\/b area base address = expression}
+\DoxyCodeLine{ -\/g global symbol = expression}
+\DoxyCodeLine{ -\/a (platform) Select platform specific virtual address translation}
+\DoxyCodeLine{Map format:}
+\DoxyCodeLine{ -\/m Map output generated as (out)file[.map]}
+\DoxyCodeLine{ -\/w Wide listing format for map file}
+\DoxyCodeLine{ -\/x Hexadecimal (default)}
+\DoxyCodeLine{ -\/d Decimal}
+\DoxyCodeLine{ -\/q Octal}
+\DoxyCodeLine{Output:}
+\DoxyCodeLine{ -\/i Intel Hex as (out)file[.ihx]}
+\DoxyCodeLine{ -\/s Motorola S Record as (out)file[.s19]}
+\DoxyCodeLine{ -\/j NoICE Debug output as (out)file[.noi]}
+\DoxyCodeLine{ -\/y SDCDB Debug output as (out)file[.cdb]}
+\DoxyCodeLine{List:}
+\DoxyCodeLine{ -\/u Update listing file(s) with link data as file(s)[.rst]}
+\DoxyCodeLine{Case Sensitivity:}
+\DoxyCodeLine{ -\/z Disable Case Sensitivity for Symbols}
+\DoxyCodeLine{End:}
+\DoxyCodeLine{ -\/e or null line terminates input}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_ihxcheck-settings}%
+\Hypertarget{docs_toolchain_settings_ihxcheck-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md213}{}\doxysubsection{ihxcheck settings}\label{docs_toolchain_settings_autotoc_md213}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{ihx\_check input\_file.ihx [options]}
+\DoxyCodeLine{}
+\DoxyCodeLine{Options}
+\DoxyCodeLine{-\/h : Show this help}
+\DoxyCodeLine{-\/e : Treat warnings as errors}
+\DoxyCodeLine{}
+\DoxyCodeLine{Use: Read a .ihx and warn about overlapped areas.}
+\DoxyCodeLine{Example: "{}ihx\_check build/MyProject.ihx"{}}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_makebin-settings}%
+\Hypertarget{docs_toolchain_settings_makebin-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md214}{}\doxysubsection{makebin settings}\label{docs_toolchain_settings_autotoc_md214}
+Also see \mbox{\hyperlink{docs_rombanking_mbcs_setting_mbc_and_rom_ram_banks}{setting\+\_\+mbc\+\_\+and\+\_\+rom\+\_\+ram\+\_\+banks}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{makebin: convert a Intel IHX file to binary or GameBoy format binary.}
+\DoxyCodeLine{Usage: makebin [options] [ []]}
+\DoxyCodeLine{Options:}
+\DoxyCodeLine{ -\/p pack mode: the binary file size will be truncated to the last occupied byte}
+\DoxyCodeLine{ -\/s romsize size of the binary file (default: rom banks * 16384)}
+\DoxyCodeLine{ -\/Z generate GameBoy format binary file}
+\DoxyCodeLine{ -\/S generate Sega Master System format binary file}
+\DoxyCodeLine{SMS format options (applicable only with -\/S option):}
+\DoxyCodeLine{ -\/xo n rom size (0xa-\/0x2)}
+\DoxyCodeLine{ -\/xj n set region code (3-\/7)}
+\DoxyCodeLine{ -\/xv n version number (0-\/15)}
+\DoxyCodeLine{GameBoy format options (applicable only with -\/Z option):}
+\DoxyCodeLine{ -\/yo n number of rom banks (default: 2) (autosize: A)}
+\DoxyCodeLine{ -\/ya n number of ram banks (default: 0)}
+\DoxyCodeLine{ -\/yt n MBC type (default: no MBC)}
+\DoxyCodeLine{ -\/yl n old licensee code (default: 0x33)}
+\DoxyCodeLine{ -\/yk cc new licensee string (default: 00)}
+\DoxyCodeLine{ -\/yn name cartridge name (default: none)}
+\DoxyCodeLine{ -\/yc GameBoy Color compatible}
+\DoxyCodeLine{ -\/yC GameBoy Color only}
+\DoxyCodeLine{ -\/ys Super GameBoy}
+\DoxyCodeLine{ -\/yS Convert .noi file named like input file to .sym}
+\DoxyCodeLine{ -\/yj set non-\/Japanese region flag}
+\DoxyCodeLine{ -\/yN do not copy big N validation logo into ROM header}
+\DoxyCodeLine{ -\/yp addr=value Set address in ROM to given value (address 0x100-\/0x1FE)}
+\DoxyCodeLine{Arguments:}
+\DoxyCodeLine{ optional IHX input file, '-\/' means stdin. (default: stdin)}
+\DoxyCodeLine{ optional output file, '-\/' means stdout. (default: stdout)}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_gbcompress-settings}%
+\Hypertarget{docs_toolchain_settings_gbcompress-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md215}{}\doxysubsection{gbcompress settings}\label{docs_toolchain_settings_autotoc_md215}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{gbcompress [options] infile outfile}
+\DoxyCodeLine{Use: compress a binary file and write it out.}
+\DoxyCodeLine{}
+\DoxyCodeLine{Options}
+\DoxyCodeLine{-\/h : Show this help screen}
+\DoxyCodeLine{-\/d : Decompress (default is compress)}
+\DoxyCodeLine{-\/v : Verbose output}
+\DoxyCodeLine{-\/-\/cin : Read input as .c source format (8 bit char ONLY, uses first array found)}
+\DoxyCodeLine{-\/-\/cout : Write output in .c / .h source format (8 bit char ONLY) }
+\DoxyCodeLine{-\/-\/varname= : specify variable name for c source output}
+\DoxyCodeLine{-\/-\/alg= : specify compression type: 'rle', 'gb' (default)}
+\DoxyCodeLine{Example: "{}gbcompress binaryfile.bin compressed.bin"{}}
+\DoxyCodeLine{Example: "{}gbcompress -\/d compressedfile.bin decompressed.bin"{}}
+\DoxyCodeLine{Example: "{}gbcompress -\/-\/alg=rle binaryfile.bin compressed.bin"{}}
+\DoxyCodeLine{}
+\DoxyCodeLine{The default compression (gb) is the type used by gbtd/gbmb}
+\DoxyCodeLine{The rle compression is Amiga IFF style}
+\end{DoxyCode}
+
+
+\label{docs_toolchain_settings_png2asset-settings}%
+\Hypertarget{docs_toolchain_settings_png2asset-settings}%
+\hypertarget{docs_toolchain_settings_autotoc_md216}{}\doxysubsection{png2asset settings}\label{docs_toolchain_settings_autotoc_md216}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{usage: png2asset .png [options]}
+\DoxyCodeLine{-\/c ouput file (default: .c)}
+\DoxyCodeLine{-\/sw metasprites width size (default: png width)}
+\DoxyCodeLine{-\/sh metasprites height size (default: png height)}
+\DoxyCodeLine{-\/sp change default for sprite OAM property bytes (in hex) (default: 0x00)}
+\DoxyCodeLine{-\/px metasprites pivot x coordinate (default: metasprites width / 2)}
+\DoxyCodeLine{-\/py metasprites pivot y coordinate (default: metasprites height / 2)}
+\DoxyCodeLine{-\/pw metasprites collision rect widht (default: metasprites width)}
+\DoxyCodeLine{-\/ph metasprites collision rect height (default: metasprites height)}
+\DoxyCodeLine{-\/spr8x8 use SPRITES\_8x8 (default: SPRITES\_8x16)}
+\DoxyCodeLine{-\/spr8x16 use SPRITES\_8x16 (default: SPRITES\_8x16)}
+\DoxyCodeLine{-\/b bank (default 0)}
+\DoxyCodeLine{-\/keep\_palette\_order use png palette}
+\DoxyCodeLine{-\/noflip disable tile flip}
+\DoxyCodeLine{-\/map Export as map (tileset + bg)}
+\DoxyCodeLine{-\/use\_map\_attributes Use CGB BG Map attributes (default: palettes are stored for each tile in a separate array)}
+\DoxyCodeLine{-\/use\_structs Group the exported info into structs (default: false) (used by ZGB Game Engine)}
+\DoxyCodeLine{-\/bpp bits per pixel: 2, 4 (default: 2)}
+\DoxyCodeLine{-\/max\_palettes maximum number of palettes allowed (default: 2)}
+\DoxyCodeLine{-\/pack\_mode gb, sgb or sms (default:GB)}
+\DoxyCodeLine{-\/tile\_origin tile index offset for maps (instead of zero)}
+\end{DoxyCode}
+
\ No newline at end of file
diff --git a/docs/latex/docs_using_gbdk.tex b/docs/latex/docs_using_gbdk.tex
new file mode 100644
index 00000000..258dc595
--- /dev/null
+++ b/docs/latex/docs_using_gbdk.tex
@@ -0,0 +1,165 @@
+\hypertarget{docs_using_gbdk_autotoc_md40}{}\doxysubsection{Interrupts}\label{docs_using_gbdk_autotoc_md40}
+Interrupts allow execution to jump to a different part of your code as soon as an external event occurs -\/ for example the L\+CD entering the vertical blank period, serial data arriving or the timer reaching its end count. For an example see the irq.\+c sample project.
+
+Interrupts in G\+B\+DK are handled using the functions \mbox{\hyperlink{gb_8h_ad77796783b3a601b6f3781dfc3983499}{disable\+\_\+interrupts()}}, \mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts()}}, \mbox{\hyperlink{sms_8h_aefda0091b2934571a11e07b512735f50}{set\+\_\+interrupts(uint8\+\_\+t ier)}} and the interrupt service routine (I\+SR) linkers \mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+B\+L()}}, \mbox{\hyperlink{sms_8h_a6c66a583a8f0744e3985c89725e3dc10}{add\+\_\+\+T\+IM}}, \mbox{\hyperlink{sms_8h_a51add93356a25c71e8c37a73c9065c9d}{add\+\_\+\+L\+CD}}, \mbox{\hyperlink{sms_8h_a3372d61a07e0466bdb909a27f3aaaca9}{add\+\_\+\+S\+IO}} and \mbox{\hyperlink{sms_8h_a48163816121cd669526817d3e6266fd9}{add\+\_\+\+J\+OY}} which add interrupt handlers for the vertical blank, timer, L\+CD, serial link and joypad interrupts respectively.
+
+Since an interrupt can occur at any time an Interrupt Service Request (I\+SR) cannot take any arguments or return anything. Its only way of communicating with the greater program is through the global variables. When interacting with those shared I\+SR global variables from main code outside the interrupt, it is a good idea to wrap them in a {\ttfamily critical \{\}} section in case the interrupt occurs and modifies the variable while it is being used.
+
+Interrupts should be disabled before adding I\+S\+Rs. To use multiple interrupts, {\itshape logical OR} the relevant I\+F\+L\+A\+Gs together.
+
+I\+S\+Rs should be kept as small and short as possible, do not write an I\+SR so long that the Game Boy hardware spends all of its time servicing interrupts and has no time spare for the main code.
+
+For more detail on the Game Boy interrupts consider reading about them in the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}}.\hypertarget{docs_using_gbdk_autotoc_md41}{}\doxysubsubsection{Available Interrupts}\label{docs_using_gbdk_autotoc_md41}
+The Game\+Boy hardware can generate 5 types of interrupts. Custom Interrupt Service Routines (I\+S\+Rs) can be added in addition to the built-\/in ones available in G\+B\+DK.
+
+
+\begin{DoxyItemize}
+\item V\+BL \+: L\+CD Vertical Blanking period start
+\begin{DoxyItemize}
+\item The default V\+BL I\+SR is installed automatically.
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+B\+L()}} and \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxyItemize}
+\end{DoxyItemize}
+\item L\+CD \+: L\+C\+DC status (such as the start of a horizontal line)
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{gb_8h_a9f9f77105099a34556247d5bb03368d1}{add\+\_\+\+L\+C\+D()}} and \mbox{\hyperlink{gb_8h_a32683767caa2a263a1f494b3605786e7}{remove\+\_\+\+L\+C\+D()}}
+\item Example project\+: {\ttfamily lcd\+\_\+isr\+\_\+wobble}
+\end{DoxyItemize}
+\item T\+IM \+: Timer overflow
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{gb_8h_a028d1a2e820951bb4f103d6469975ffb}{add\+\_\+\+T\+I\+M()}} and \mbox{\hyperlink{gb_8h_a142f6c7755fce8b1148faf658d8ec147}{remove\+\_\+\+T\+I\+M()}}
+\item Example project\+: {\ttfamily tim}
+\end{DoxyItemize}
+\item S\+IO \+: Serial Link I/O transfer end
+\begin{DoxyItemize}
+\item The default S\+IO I\+SR gets installed automatically if any of the standard S\+IO calls are used. These calls include \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte()}}, \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte()}}.
+\item The default S\+IO I\+SR cannot be removed once installed. Only secondary chained S\+IO I\+S\+Rs (added with \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}} ) can be removed.
+\item See \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}} and \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+I\+O()}}
+\item Example project\+: {\ttfamily comm}
+\end{DoxyItemize}
+\item J\+OY \+: Transition from high to low of a joypad button
+\begin{DoxyItemize}
+\item See \mbox{\hyperlink{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}{add\+\_\+\+J\+O\+Y()}} and \mbox{\hyperlink{gb_8h_a4a3e87e0917d5efb6bc7c94e9754fcd0}{remove\+\_\+\+J\+O\+Y()}}
+\end{DoxyItemize}
+\end{DoxyItemize}\hypertarget{docs_using_gbdk_autotoc_md42}{}\doxysubsubsection{Adding your own interrupt handler}\label{docs_using_gbdk_autotoc_md42}
+It is possible to install your own interrupt handlers (in C or in assembly) for any of these interrupts. Up to 4 chained handlers may be added, with the last added being called last. If the \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}} function is to be called, only three may be added for V\+BL.
+
+Interrupt handlers are called in sequence. To install a new interrupt handler, do the following\+:
+
+
+\begin{DoxyEnumerate}
+\item Write a function (say foo()) that takes no parameters, and that returns nothing. Remember that the code executed in an interrupt handler must be short.
+\item Inside a {\ttfamily \+\_\+\+\_\+critical \{ ... \}} section, install your interrupt handling routines using the add\+\_\+\+X\+X\+X() function, where X\+XX is the interrupt that you want to handle.
+\item Enable interrupts for the I\+RQ you want to handle, using the \mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} function. Note that the V\+BL interrupt is already enabled before the main() function is called. If you want to set the interrupts before main() is called, you must install an initialization routine.
+\end{DoxyEnumerate}
+
+See the {\ttfamily irq} example project for additional details for a complete example.\hypertarget{docs_using_gbdk_autotoc_md43}{}\doxysubsubsection{Using your own Interrupt Dispatcher}\label{docs_using_gbdk_autotoc_md43}
+If you want to use your own Interrupt Dispatcher instead of the G\+B\+DK chained dispatcher (for improved performance), then don\textquotesingle{}t call the {\ttfamily add\+\_\+...()} function for the respective interrupt and it\textquotesingle{}s dispatcher won\textquotesingle{}t be installed.
+\begin{DoxyItemize}
+\item Exception\+: the V\+BL dispatcher will always be linked in at compile time.
+\item For the S\+IO interrupt, also do not make any standard S\+IO calls to avoid having it\textquotesingle{}s dispatcher installed.
+\end{DoxyItemize}
+
+Then, \mbox{\hyperlink{isr_8h_a73769fed9338af86fdb7df35d7b82620}{I\+S\+R\+\_\+\+V\+E\+C\+T\+O\+R()}} or \mbox{\hyperlink{isr_8h_a78f9ef588aaf221023e48899898d566b}{I\+S\+R\+\_\+\+N\+E\+S\+T\+E\+D\+\_\+\+V\+E\+C\+T\+O\+R()}} can be used to install a custom I\+SR handler.\hypertarget{docs_using_gbdk_autotoc_md44}{}\doxysubsubsection{Returning from Interrupts and S\+T\+A\+T mode}\label{docs_using_gbdk_autotoc_md44}
+By default when an Interrupt handler completes and is ready to exit it will check S\+T\+A\+T\+\_\+\+R\+EG and only return at the B\+E\+G\+I\+N\+N\+I\+NG of either L\+CD Mode 0 or Mode 1. This helps prevent graphical glitches caused when an I\+SR interrupts a graphics operation in one mode but returns in a different mode for which that graphics operation is not allowed.
+
+You can change this behavior using \mbox{\hyperlink{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}{nowait\+\_\+int\+\_\+handler()}} which does not check \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} before returning. Also see \mbox{\hyperlink{gb_8h_acc9afd0cb72e763a1213d256b942a68f}{wait\+\_\+int\+\_\+handler()}}.\hypertarget{docs_using_gbdk_autotoc_md45}{}\doxysubsection{What G\+B\+D\+K does automatically and behind the scenes}\label{docs_using_gbdk_autotoc_md45}
+\hypertarget{docs_using_gbdk_autotoc_md46}{}\doxysubsubsection{O\+A\+M (\+V\+R\+A\+M Sprite Attribute Table)}\label{docs_using_gbdk_autotoc_md46}
+G\+B\+DK sets up a Shadow O\+AM which gets copied automatically to the hardware O\+AM by the default V-\/\+Blank I\+SR. The Shadow O\+AM allows updating sprites without worrying about whether it is safe to write to them or not based on the hardware L\+CD mode.\hypertarget{docs_using_gbdk_autotoc_md47}{}\doxysubsubsection{Font tiles when using stdio.\+h}\label{docs_using_gbdk_autotoc_md47}
+Including \mbox{\hyperlink{stdio_8h}{stdio.\+h}} and using functions such as \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}} will use a large number of the background tiles for font characters. If stdio.\+h is not included then that space will be available for use with other tiles instead.\hypertarget{docs_using_gbdk_autotoc_md48}{}\doxysubsubsection{Default Interrupt Service Handlers (\+I\+S\+Rs)}\label{docs_using_gbdk_autotoc_md48}
+
+\begin{DoxyItemize}
+\item V-\/\+Blank\+: A default V-\/\+Blank I\+SR is installed on startup which copies the Shadow O\+AM to the hardware O\+AM and increments the global \mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}} variable once per frame.
+\item Serial Link I/O\+: If any of the G\+B\+DK serial link functions are used such as \mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte()}} and \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte()}}, the default S\+IO serial link handler will be installed automatically at compile-\/time.
+\end{DoxyItemize}\hypertarget{docs_using_gbdk_autotoc_md49}{}\doxysubsection{Copying Functions to R\+A\+M and H\+I\+R\+AM}\label{docs_using_gbdk_autotoc_md49}
+See the {\ttfamily ram\+\_\+function} example project included with G\+B\+DK demonstrates copying functions to R\+AM and H\+I\+R\+AM.
+
+{\ttfamily Warning!} Copying of functions is generally not safe since they may contain jumps to absolute addresses that will not be converted to match the new location.
+
+It is possible to copy functions to R\+AM and H\+I\+R\+AM (using the \mbox{\hyperlink{asm_2gbz80_2string_8h_a6a1a6cbe7fb6102819098340a4986574}{memcpy()}} and \mbox{\hyperlink{gb_8h_a97b9f2fc6ac7cae97656aca940d65d44}{hiramcpy()}} functions), and execute them from C. Ensure you have enough free space in R\+AM or H\+I\+R\+AM for copying a function.
+
+There are basically two ways for calling a function located in R\+AM, H\+I\+R\+AM, or R\+OM\+:
+
+
+\begin{DoxyItemize}
+\item Declare a pointer-\/to-\/function variable, and set it to the address of the function to call.
+\item Declare the function as extern, and set its address at link time using the -\/Wl-\/g\+X\+XX=\# flag (where X\+XX is the name of the function, and \# is its address).
+\end{DoxyItemize}
+
+The second approach is slightly more efficient. Both approaches are demonstrated in the {\ttfamily ram\+\_\+function.\+c} example.\hypertarget{docs_using_gbdk_autotoc_md50}{}\doxysubsection{Mixing C and Assembly}\label{docs_using_gbdk_autotoc_md50}
+You can mix C and assembly (A\+SM) in two ways as described below. For additional detail see the \mbox{\hyperlink{docs_links_and_tools_links_sdcc_docs}{links\+\_\+sdcc\+\_\+docs}}.\hypertarget{docs_using_gbdk_autotoc_md51}{}\doxysubsubsection{Inline A\+S\+M within C source files}\label{docs_using_gbdk_autotoc_md51}
+Example\+: ~\newline
+ \begin{DoxyVerb} __asm__("nop");
+\end{DoxyVerb}
+
+
+Another Example\+: ~\newline
+ \begin{DoxyVerb} void some_c_function()
+ {
+ // Optionally do something
+ __asm
+ (ASM code goes here)
+ __endasm;
+ }
+\end{DoxyVerb}
+\hypertarget{docs_using_gbdk_autotoc_md52}{}\doxysubsubsection{In Separate A\+S\+M files}\label{docs_using_gbdk_autotoc_md52}
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000002}{Todo}}]This is from G\+B\+DK 2.\+x docs, verify it with G\+B\+D\+K-\/2020 and modern S\+D\+CC\end{DoxyRefDesc}
+
+
+It is possible to assemble and link files written in A\+SM alongside files written in C.
+
+
+\begin{DoxyItemize}
+\item A C identifier {\ttfamily i} will be called {\ttfamily \+\_\+i} in assembly.
+\item Results are always returned into the {\ttfamily DE} register.
+\item Parameters are passed on the stack (starting at {\ttfamily S\+P+2} because the return address is also saved on the stack).
+\item Assembly identifier are exported using the {\ttfamily .globl} directive.
+\item You can access Game\+Boy hardware registers using {\ttfamily \+\_\+reg\+\_\+0x\+XX} where {\ttfamily XX} is the register number (see {\ttfamily sound.\+c} for an example).
+\item Registers must be preserved across function calls (you must store them at function begin, and restore them at the end), except {\ttfamily HL} (and {\ttfamily DE} when the function returns a result).
+\end{DoxyItemize}
+
+Here is an example of how to mix assembly with C\+:
+
+{\ttfamily main.\+c} \begin{DoxyVerb}main()
+{
+ int16_t i;
+ int16_t add(int16_t, int16_t);
+
+ i = add(1, 3);
+}
+\end{DoxyVerb}
+
+
+{\ttfamily add.\+s} \begin{DoxyVerb}.globl _add
+_add: ; int16_t add(int16_t a, int16_t b)
+ ; There is no register to save:
+ ; BC is not used
+ ; DE is the return register
+ ; HL needs never to be saved
+LDA HL,2(SP)
+LD E,(HL) ; Get a in DE
+INC HL
+LD D,(HL)
+INC HL
+LD A,(HL) ; Get b in HL
+INC HL
+LD H,(HL)
+LD L,A
+ADD HL,DE ; Add DE to HL
+LD D,H
+LD E,L
+ ; There is no register to restore
+RET ; Return result in DE
+\end{DoxyVerb}
+\hypertarget{docs_using_gbdk_autotoc_md53}{}\doxysubsection{Including binary files in C source with incbin}\label{docs_using_gbdk_autotoc_md53}
+Data from binary files can be included in C source files as a const array using the \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}} macro.
+
+See the {\ttfamily incbin} example project for a demo of how to use it.\hypertarget{docs_using_gbdk_autotoc_md54}{}\doxysubsection{Known Issues and Limitations}\label{docs_using_gbdk_autotoc_md54}
+\hypertarget{docs_using_gbdk_autotoc_md55}{}\doxysubsubsection{S\+D\+CC}\label{docs_using_gbdk_autotoc_md55}
+
+\begin{DoxyItemize}
+\item Const arrays declared with {\ttfamily somevar\mbox{[}n\mbox{]} = \{x\}} will {\bfseries{N\+OT}} get initialized with value {\ttfamily x}. This may change when the S\+D\+CC R\+LE initializer is fixed. Use memset for now if you need it.
+\item S\+D\+CC banked calls and \mbox{\hyperlink{docs_rombanking_mbcs_far_pointers}{far\+\_\+pointers}} in G\+B\+DK only save one byte for the R\+OM bank, so for example they are limtied to {\bfseries{bank 15}} max for M\+B\+C1 and {\bfseries{bank 255}} max for M\+B\+C5. See \mbox{\hyperlink{docs_rombanking_mbcs_banked_calls}{banked\+\_\+calls}} for more details.
+\end{DoxyItemize}
\ No newline at end of file
diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty
new file mode 100644
index 00000000..78a52546
--- /dev/null
+++ b/docs/latex/doxygen.sty
@@ -0,0 +1,576 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{calc}
+\RequirePackage{float}
+%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{longtable_doxygen}
+\RequirePackage{tabu_doxygen}
+\RequirePackage{fancyvrb}
+\RequirePackage{tabularx}
+\RequirePackage{multirow}
+\RequirePackage{hanging}
+\RequirePackage{ifpdf}
+\RequirePackage{adjustbox}
+\RequirePackage{amssymb}
+\RequirePackage{stackengine}
+\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup%
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@%
+ \penalty -100\vskip\z@\@plus -\dimen@%
+ \vskip\dimen@%
+ \penalty 9999%
+ \vskip -\dimen@%
+ \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+ \endgroup%
+}
+
+\newcommand{\DoxyHorRuler}[1]{%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{#1=0}%
+ {%
+ \hrule%
+ }%
+ {%
+ \hrulefilll%
+ }%
+}
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+ {%
+ \parbox[b]{\labelwidth-4pt}{%
+ \makebox[0pt][l]{\DoxyLabelFont#1}%
+ \vspace{1.5\baselineskip}%
+ }%
+ }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ %\setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by
...
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
+\newlength{\CodeWidthChar}
+\newlength{\CodeHeightChar}
+\settowidth{\CodeWidthChar}{?}
+\settoheight{\CodeHeightChar}{?}
+% Necessary for hanging indent
+\newlength{\DoxyCodeWidth}
+
+\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par}
+
+\newcommand\NiceSpace{%
+ \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}[1]{%
+ \par%
+ \scriptsize%
+ \normalfont\ttfamily%
+ \rightskip0pt plus 1fil%
+ \settowidth{\DoxyCodeWidth}{000000}%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{\equal{#1}{0}}
+ {
+ {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
+ }
+ {
+ {\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
+ }
+
+}{%
+ \normalfont%
+ \normalsize%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+}
+
+% Redefining not defined characters, i.e. "Replacement Character" in tex output.
+\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
+ \textcolor{white}{\sffamily\bfseries\small ?}}{%
+ \rotatebox{45}{$\blacksquare$}}}}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}[1]{%
+ \DoxyCode{#1}%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or ... )
+\newenvironment{DoxyEnumerate}{%
+ \enumerate%
+}{%
+ \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or
...
)
+\newenvironment{DoxyItemize}{%
+ \itemize%
+}{%
+ \enditemize%
+}
+
+% Used by description lists (using
...
)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \begin{center}%
+}{%
+ \end{center}%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+ \begin{center}%
+}{%
+ \end{center}%
+}
+
+% Used by @image
+% (only if inline is specified)
+\newenvironment{DoxyInlineImage}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+ \tabulinesep=1mm%
+ \par%
+ \ifthenelse{\equal{#1}{}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
+ {\ifthenelse{\equal{#1}{1}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
+ }
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields simple class style enums
+\newenvironment{DoxyEnumFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+ \begin{itemize}%
+ \setlength{\itemsep}{-3pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+}{%
+ \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \renewcommand{\makelabel}{\hfill}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+ \begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}%
+ \settowidth\labelwidth{\makelabel{#1}}%
+ \setlength\leftmargin{\labelwidth+\labelsep}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }
+}{%
+ \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newenvironment{TabularC}[1]%
+{\tabulinesep=1mm
+\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
+{\end{longtabu*}\par}%
+
+\newenvironment{TabularNC}[1]%
+{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
+{\end{tabu}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ }%
+ \item[]\ignorespaces%
+}{%
+ \unskip%
+ \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+ \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used to link to a table when hyperlinks are turned on
+\newcommand{\doxytablelink}[2]{%
+ \ref{#1}%
+}
+
+% Used to link to a table when hyperlinks are turned off
+\newcommand{\doxytableref}[3]{%
+ \ref{#3}%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Colors used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
+
+% Color used for table heading
+\newcommand{\tableheadbgcolor}{lightgray}%
+
+% Version of hypertarget with correct landing location
+\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
+
+% possibility to have sections etc. be within the margins
+% unfortunately had to copy part of book.cls and add \raggedright
+\makeatletter
+\newcommand\doxysection{\@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\raggedright\normalfont\Large\bfseries}}
+\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\large\bfseries}}
+\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}%
+ {3.25ex \@plus1ex \@minus.2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\makeatother
+% Define caption that is also suitable in a table
+\makeatletter
+\def\doxyfigcaption{%
+\refstepcounter{figure}%
+\@dblarg{\@caption{figure}}}
+\makeatother
diff --git a/docs/latex/drawing_8h.tex b/docs/latex/drawing_8h.tex
new file mode 100644
index 00000000..033a7804
--- /dev/null
+++ b/docs/latex/drawing_8h.tex
@@ -0,0 +1,316 @@
+\hypertarget{drawing_8h}{}\doxysubsection{gb/drawing.h File Reference}
+\label{drawing_8h}\index{gb/drawing.h@{gb/drawing.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{drawing_8h_a9a07c448b4d721dbec2715f51727e099}{G\+R\+A\+P\+H\+I\+C\+S\+\_\+\+W\+I\+D\+TH}}~160
+\item
+\#define \mbox{\hyperlink{drawing_8h_aa9909ac8ecb03cbb763258a8f98f4170}{G\+R\+A\+P\+H\+I\+C\+S\+\_\+\+H\+E\+I\+G\+HT}}~144
+\item
+\#define \mbox{\hyperlink{drawing_8h_aa8abfd58ea514228abd69d8f6330e91d}{S\+O\+L\+ID}}~0x00 /$\ast$ Overwrites the existing pixels $\ast$/
+\item
+\#define \mbox{\hyperlink{drawing_8h_a3363ca4d6d3cc0230b2804280591c991}{OR}}~0x01 /$\ast$ Performs a logical OR $\ast$/
+\item
+\#define \mbox{\hyperlink{drawing_8h_a45cd11034d1a7d86c3a88d36f5e7f1ab}{X\+OR}}~0x02 /$\ast$ Performs a logical X\+OR $\ast$/
+\item
+\#define \mbox{\hyperlink{drawing_8h_acd1b97556dfbbac61063a63031d2f91d}{A\+ND}}~0x03 /$\ast$ Performs a logical A\+ND $\ast$/
+\item
+\#define \mbox{\hyperlink{drawing_8h_a87b537f5fa5c109d3c05c13d6b18f382}{W\+H\+I\+TE}}~0
+\item
+\#define \mbox{\hyperlink{drawing_8h_a0ffe2221c8690dc80b5f9553474dd096}{L\+T\+G\+R\+EY}}~1
+\item
+\#define \mbox{\hyperlink{drawing_8h_a4dad87d91b9201be3b4ede372f31ae8a}{D\+K\+G\+R\+EY}}~2
+\item
+\#define \mbox{\hyperlink{drawing_8h_a7b3b25cba33b07c303f3060fe41887f6}{B\+L\+A\+CK}}~3
+\item
+\#define \mbox{\hyperlink{drawing_8h_a91d52443c77ee105bd68cb0b47a8ee49}{M\+\_\+\+N\+O\+F\+I\+LL}}~0
+\item
+\#define \mbox{\hyperlink{drawing_8h_aad3d180e0f12d6a6e5278fe0163f4c3e}{M\+\_\+\+F\+I\+LL}}~1
+\item
+\#define \mbox{\hyperlink{drawing_8h_a4dec4d9b2bace4f5bc6e6337f4086837}{S\+I\+G\+N\+ED}}~1
+\item
+\#define \mbox{\hyperlink{drawing_8h_a08cbc66092284f7da94279f986a0aae9}{U\+N\+S\+I\+G\+N\+ED}}~0
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{drawing_8h_aef65e5faa0adb82768fca06aafbe50e8}{gprint}} (char $\ast$str) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+void \mbox{\hyperlink{drawing_8h_afeb7c0a887fe3d18659175de77a787a5}{gprintln}} (\mbox{\hyperlink{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}{int16\+\_\+t}} number, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} radix, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} signed\+\_\+value) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+void \mbox{\hyperlink{drawing_8h_a9d70278d1d09fdc24ea6bd9788dbd96a}{gprintn}} (\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} number, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} radix, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} signed\+\_\+value) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} \mbox{\hyperlink{drawing_8h_a5f7a0ed309f9526e9be285146559848c}{gprintf}} (char $\ast$fmt,...) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+void \mbox{\hyperlink{drawing_8h_ac888c327137d7f00cb3af57af236602a}{plot}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} colour, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_a595c77bca15884c75fd85af84f373814}{plot\+\_\+point}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_a7b8f466ecc6be62f6c034e52f05e957a}{switch\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$src, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$dst) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_ab2c383d3e1541fae40cf5174e22166c6}{draw\+\_\+image}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_afe0ad8959a2867c4b60829d065660f1b}{line}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x1, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y1, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x2, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y2) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_ae1170230e5c9e61cc4321632e949e7ce}{box}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x1, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y1, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x2, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y2, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} style) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_ad46c3bdc38dfc9b70214693390d404cb}{circle}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} radius, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} style) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{drawing_8h_a1e268a46a8151f9cc3b7b40100123d09}{getpix}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_a9178e678a17cb08653600f435093ae2a}{wrtchr}} (char chr) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{drawing_8h_a9fa68d25be92836a1b08a5e610b4f32f}{color}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} forecolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} backcolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+All Points Addressable (A\+PA) mode drawing library.
+
+Drawing routines originally by Pascal Felber Legendary overhall by Jon Fuge \href{mailto:jonny@q-continuum.demon.co.uk}{\texttt{ jonny@q-\/continuum.\+demon.\+co.\+uk}} Commenting by Michael Hope
+
+Note\+: The standard text \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf()}} and \mbox{\hyperlink{stdio_8h_a9bc92fb9f23c72a66d030d4028dda72d}{putchar()}} cannot be used in A\+PA mode -\/ use \mbox{\hyperlink{drawing_8h_a5f7a0ed309f9526e9be285146559848c}{gprintf()}} and \mbox{\hyperlink{drawing_8h_a9178e678a17cb08653600f435093ae2a}{wrtchr()}} instead.
+
+Note\+: Using drawing.\+h will cause it\textquotesingle{}s custom V\+BL and L\+CD I\+S\+Rs ({\ttfamily drawing\+\_\+vbl} and {\ttfamily drawing\+\_\+lcd}) to be installed. Changing the mode ({\ttfamily mode(\+M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+U\+T);}) will cause them to be de-\/installed.
+
+The valid coordinate ranges are from (x,y) 0,0 to 159,143. There is no built-\/in clipping, so drawing outside valid coordinates will likely produce undesired results (wrapping/etc).
+
+\DoxyHorRuler{0}
+
+
+{\bfseries{Important note for the drawing A\+PI \+:}}
+
+The Game Boy graphics hardware is not well suited to frame-\/buffer style graphics such as the kind provided in {\ttfamily drawing.\+h}. Due to that, {\bfseries{most drawing functions (rectangles, circles, etc) will be slow}} . When possible it\textquotesingle{}s much faster and more efficient to work with the tiles and tile maps that the Game Boy hardware is built around.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{drawing_8h_a9a07c448b4d721dbec2715f51727e099}\label{drawing_8h_a9a07c448b4d721dbec2715f51727e099}}
+\index{drawing.h@{drawing.h}!GRAPHICS\_WIDTH@{GRAPHICS\_WIDTH}}
+\index{GRAPHICS\_WIDTH@{GRAPHICS\_WIDTH}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{GRAPHICS\_WIDTH}{GRAPHICS\_WIDTH}}
+{\footnotesize\ttfamily \#define G\+R\+A\+P\+H\+I\+C\+S\+\_\+\+W\+I\+D\+TH~160}
+
+Size of the screen in pixels \mbox{\Hypertarget{drawing_8h_aa9909ac8ecb03cbb763258a8f98f4170}\label{drawing_8h_aa9909ac8ecb03cbb763258a8f98f4170}}
+\index{drawing.h@{drawing.h}!GRAPHICS\_HEIGHT@{GRAPHICS\_HEIGHT}}
+\index{GRAPHICS\_HEIGHT@{GRAPHICS\_HEIGHT}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{GRAPHICS\_HEIGHT}{GRAPHICS\_HEIGHT}}
+{\footnotesize\ttfamily \#define G\+R\+A\+P\+H\+I\+C\+S\+\_\+\+H\+E\+I\+G\+HT~144}
+
+\mbox{\Hypertarget{drawing_8h_aa8abfd58ea514228abd69d8f6330e91d}\label{drawing_8h_aa8abfd58ea514228abd69d8f6330e91d}}
+\index{drawing.h@{drawing.h}!SOLID@{SOLID}}
+\index{SOLID@{SOLID}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{SOLID}{SOLID}}
+{\footnotesize\ttfamily \#define S\+O\+L\+ID~0x00 /$\ast$ Overwrites the existing pixels $\ast$/}
+
+\mbox{\Hypertarget{drawing_8h_a3363ca4d6d3cc0230b2804280591c991}\label{drawing_8h_a3363ca4d6d3cc0230b2804280591c991}}
+\index{drawing.h@{drawing.h}!OR@{OR}}
+\index{OR@{OR}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{OR}{OR}}
+{\footnotesize\ttfamily \#define OR~0x01 /$\ast$ Performs a logical OR $\ast$/}
+
+\mbox{\Hypertarget{drawing_8h_a45cd11034d1a7d86c3a88d36f5e7f1ab}\label{drawing_8h_a45cd11034d1a7d86c3a88d36f5e7f1ab}}
+\index{drawing.h@{drawing.h}!XOR@{XOR}}
+\index{XOR@{XOR}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{XOR}{XOR}}
+{\footnotesize\ttfamily \#define X\+OR~0x02 /$\ast$ Performs a logical X\+OR $\ast$/}
+
+\mbox{\Hypertarget{drawing_8h_acd1b97556dfbbac61063a63031d2f91d}\label{drawing_8h_acd1b97556dfbbac61063a63031d2f91d}}
+\index{drawing.h@{drawing.h}!AND@{AND}}
+\index{AND@{AND}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{AND}{AND}}
+{\footnotesize\ttfamily \#define A\+ND~0x03 /$\ast$ Performs a logical A\+ND $\ast$/}
+
+\mbox{\Hypertarget{drawing_8h_a87b537f5fa5c109d3c05c13d6b18f382}\label{drawing_8h_a87b537f5fa5c109d3c05c13d6b18f382}}
+\index{drawing.h@{drawing.h}!WHITE@{WHITE}}
+\index{WHITE@{WHITE}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{WHITE}{WHITE}}
+{\footnotesize\ttfamily \#define W\+H\+I\+TE~0}
+
+Possible drawing colours \mbox{\Hypertarget{drawing_8h_a0ffe2221c8690dc80b5f9553474dd096}\label{drawing_8h_a0ffe2221c8690dc80b5f9553474dd096}}
+\index{drawing.h@{drawing.h}!LTGREY@{LTGREY}}
+\index{LTGREY@{LTGREY}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{LTGREY}{LTGREY}}
+{\footnotesize\ttfamily \#define L\+T\+G\+R\+EY~1}
+
+\mbox{\Hypertarget{drawing_8h_a4dad87d91b9201be3b4ede372f31ae8a}\label{drawing_8h_a4dad87d91b9201be3b4ede372f31ae8a}}
+\index{drawing.h@{drawing.h}!DKGREY@{DKGREY}}
+\index{DKGREY@{DKGREY}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{DKGREY}{DKGREY}}
+{\footnotesize\ttfamily \#define D\+K\+G\+R\+EY~2}
+
+\mbox{\Hypertarget{drawing_8h_a7b3b25cba33b07c303f3060fe41887f6}\label{drawing_8h_a7b3b25cba33b07c303f3060fe41887f6}}
+\index{drawing.h@{drawing.h}!BLACK@{BLACK}}
+\index{BLACK@{BLACK}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{BLACK}{BLACK}}
+{\footnotesize\ttfamily \#define B\+L\+A\+CK~3}
+
+\mbox{\Hypertarget{drawing_8h_a91d52443c77ee105bd68cb0b47a8ee49}\label{drawing_8h_a91d52443c77ee105bd68cb0b47a8ee49}}
+\index{drawing.h@{drawing.h}!M\_NOFILL@{M\_NOFILL}}
+\index{M\_NOFILL@{M\_NOFILL}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{M\_NOFILL}{M\_NOFILL}}
+{\footnotesize\ttfamily \#define M\+\_\+\+N\+O\+F\+I\+LL~0}
+
+Possible fill styles for \mbox{\hyperlink{drawing_8h_ae1170230e5c9e61cc4321632e949e7ce}{box()}} and \mbox{\hyperlink{drawing_8h_ad46c3bdc38dfc9b70214693390d404cb}{circle()}} \mbox{\Hypertarget{drawing_8h_aad3d180e0f12d6a6e5278fe0163f4c3e}\label{drawing_8h_aad3d180e0f12d6a6e5278fe0163f4c3e}}
+\index{drawing.h@{drawing.h}!M\_FILL@{M\_FILL}}
+\index{M\_FILL@{M\_FILL}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{M\_FILL}{M\_FILL}}
+{\footnotesize\ttfamily \#define M\+\_\+\+F\+I\+LL~1}
+
+\mbox{\Hypertarget{drawing_8h_a4dec4d9b2bace4f5bc6e6337f4086837}\label{drawing_8h_a4dec4d9b2bace4f5bc6e6337f4086837}}
+\index{drawing.h@{drawing.h}!SIGNED@{SIGNED}}
+\index{SIGNED@{SIGNED}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{SIGNED}{SIGNED}}
+{\footnotesize\ttfamily \#define S\+I\+G\+N\+ED~1}
+
+Possible values for signed\+\_\+value in \mbox{\hyperlink{drawing_8h_afeb7c0a887fe3d18659175de77a787a5}{gprintln()}} and \mbox{\hyperlink{drawing_8h_a9d70278d1d09fdc24ea6bd9788dbd96a}{gprintn()}} \mbox{\Hypertarget{drawing_8h_a08cbc66092284f7da94279f986a0aae9}\label{drawing_8h_a08cbc66092284f7da94279f986a0aae9}}
+\index{drawing.h@{drawing.h}!UNSIGNED@{UNSIGNED}}
+\index{UNSIGNED@{UNSIGNED}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{UNSIGNED}{UNSIGNED}}
+{\footnotesize\ttfamily \#define U\+N\+S\+I\+G\+N\+ED~0}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{drawing_8h_aef65e5faa0adb82768fca06aafbe50e8}\label{drawing_8h_aef65e5faa0adb82768fca06aafbe50e8}}
+\index{drawing.h@{drawing.h}!gprint@{gprint}}
+\index{gprint@{gprint}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{gprint()}{gprint()}}
+{\footnotesize\ttfamily void gprint (\begin{DoxyParamCaption}\item[{char $\ast$}]{str }\end{DoxyParamCaption})}
+
+Print the string \textquotesingle{}str\textquotesingle{} with no interpretation \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_afeb7c0a887fe3d18659175de77a787a5}\label{drawing_8h_afeb7c0a887fe3d18659175de77a787a5}}
+\index{drawing.h@{drawing.h}!gprintln@{gprintln}}
+\index{gprintln@{gprintln}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{gprintln()}{gprintln()}}
+{\footnotesize\ttfamily void gprintln (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}{int16\+\_\+t}}}]{number, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{radix, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{signed\+\_\+value }\end{DoxyParamCaption})}
+
+Print 16 bit {\bfseries{number}} in {\bfseries{radix}} (base) in the default font at the current text position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em number} & number to print \\
+\hline
+{\em radix} & radix (base) to print with \\
+\hline
+{\em signed\+\_\+value} & should be set to S\+I\+G\+N\+ED or U\+N\+S\+I\+G\+N\+ED depending on whether the number is signed or not\\
+\hline
+\end{DoxyParams}
+The current position is advanced by the numer of characters printed. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_a9d70278d1d09fdc24ea6bd9788dbd96a}\label{drawing_8h_a9d70278d1d09fdc24ea6bd9788dbd96a}}
+\index{drawing.h@{drawing.h}!gprintn@{gprintn}}
+\index{gprintn@{gprintn}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{gprintn()}{gprintn()}}
+{\footnotesize\ttfamily void gprintn (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{number, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{radix, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{signed\+\_\+value }\end{DoxyParamCaption})}
+
+Print 8 bit {\bfseries{number}} in {\bfseries{radix}} (base) in the default font at the current text position.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_afeb7c0a887fe3d18659175de77a787a5}{gprintln()}}, \mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_a5f7a0ed309f9526e9be285146559848c}\label{drawing_8h_a5f7a0ed309f9526e9be285146559848c}}
+\index{drawing.h@{drawing.h}!gprintf@{gprintf}}
+\index{gprintf@{gprintf}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{gprintf()}{gprintf()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} gprintf (\begin{DoxyParamCaption}\item[{char $\ast$}]{fmt, }\item[{}]{... }\end{DoxyParamCaption})}
+
+Print the string and arguments given by {\bfseries{fmt}} with arguments \+\_\+\+\_\+...\+\_\+\+\_\+
+
+
+\begin{DoxyParams}{Parameters}
+{\em fmt} & The format string as per printf \\
+\hline
+{\em ...} & params\\
+\hline
+\end{DoxyParams}
+Currently supported\+: \begin{DoxyItemize}
+\item \%c (character) \item \%u (int) \item \%d (int8\+\_\+t) \item \%o (int8\+\_\+t as octal) \item \%x (int8\+\_\+t as hex) \item \%s (string)\end{DoxyItemize}
+\begin{DoxyReturn}{Returns}
+Returns the number of items printed, or -\/1 if there was an error.
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_ac888c327137d7f00cb3af57af236602a}\label{drawing_8h_ac888c327137d7f00cb3af57af236602a}}
+\index{drawing.h@{drawing.h}!plot@{plot}}
+\index{plot@{plot}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{plot()}{plot()}}
+{\footnotesize\ttfamily void plot (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{colour, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{mode }\end{DoxyParamCaption})}
+
+Old style plot -\/ try \mbox{\hyperlink{drawing_8h_a595c77bca15884c75fd85af84f373814}{plot\+\_\+point()}} \mbox{\Hypertarget{drawing_8h_a595c77bca15884c75fd85af84f373814}\label{drawing_8h_a595c77bca15884c75fd85af84f373814}}
+\index{drawing.h@{drawing.h}!plot\_point@{plot\_point}}
+\index{plot\_point@{plot\_point}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{plot\_point()}{plot\_point()}}
+{\footnotesize\ttfamily void plot\+\_\+point (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Plot a point in the current drawing mode and colour at {\bfseries{x,y}} \mbox{\Hypertarget{drawing_8h_a7b8f466ecc6be62f6c034e52f05e957a}\label{drawing_8h_a7b8f466ecc6be62f6c034e52f05e957a}}
+\index{drawing.h@{drawing.h}!switch\_data@{switch\_data}}
+\index{switch\_data@{switch\_data}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{switch\_data()}{switch\_data()}}
+{\footnotesize\ttfamily void switch\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{dst }\end{DoxyParamCaption})}
+
+Exchanges the tile on screen at x,y with the tile pointed by src, original tile is saved in dst. Both src and dst may be N\+U\+LL -\/ saving or copying to screen is not performed in this case. \mbox{\Hypertarget{drawing_8h_ab2c383d3e1541fae40cf5174e22166c6}\label{drawing_8h_ab2c383d3e1541fae40cf5174e22166c6}}
+\index{drawing.h@{drawing.h}!draw\_image@{draw\_image}}
+\index{draw\_image@{draw\_image}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{draw\_image()}{draw\_image()}}
+{\footnotesize\ttfamily void draw\+\_\+image (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Draw a full screen image at {\bfseries{data}} \mbox{\Hypertarget{drawing_8h_afe0ad8959a2867c4b60829d065660f1b}\label{drawing_8h_afe0ad8959a2867c4b60829d065660f1b}}
+\index{drawing.h@{drawing.h}!line@{line}}
+\index{line@{line}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{line()}{line()}}
+{\footnotesize\ttfamily void line (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x1, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y1, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x2, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y2 }\end{DoxyParamCaption})}
+
+Draw a line in the current drawing mode and colour from {\bfseries{x1,y1}} to {\bfseries{x2,y2}} \mbox{\Hypertarget{drawing_8h_ae1170230e5c9e61cc4321632e949e7ce}\label{drawing_8h_ae1170230e5c9e61cc4321632e949e7ce}}
+\index{drawing.h@{drawing.h}!box@{box}}
+\index{box@{box}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{box()}{box()}}
+{\footnotesize\ttfamily void box (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x1, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y1, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x2, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y2, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{style }\end{DoxyParamCaption})}
+
+Draw a box (rectangle) with corners {\bfseries{x1,y1}} and {\bfseries{x2,y2}} using fill mode {\bfseries{style}} (one of N\+O\+F\+I\+LL or F\+I\+LL) \mbox{\Hypertarget{drawing_8h_ad46c3bdc38dfc9b70214693390d404cb}\label{drawing_8h_ad46c3bdc38dfc9b70214693390d404cb}}
+\index{drawing.h@{drawing.h}!circle@{circle}}
+\index{circle@{circle}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{circle()}{circle()}}
+{\footnotesize\ttfamily void circle (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{radius, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{style }\end{DoxyParamCaption})}
+
+Draw a circle with centre at {\bfseries{x,y}} and {\bfseries{radius}} using fill mode {\bfseries{style}} (one of N\+O\+F\+I\+LL or F\+I\+LL) \mbox{\Hypertarget{drawing_8h_a1e268a46a8151f9cc3b7b40100123d09}\label{drawing_8h_a1e268a46a8151f9cc3b7b40100123d09}}
+\index{drawing.h@{drawing.h}!getpix@{getpix}}
+\index{getpix@{getpix}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{getpix()}{getpix()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} getpix (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Returns the current colour of the pixel at {\bfseries{x,y}} \mbox{\Hypertarget{drawing_8h_a9178e678a17cb08653600f435093ae2a}\label{drawing_8h_a9178e678a17cb08653600f435093ae2a}}
+\index{drawing.h@{drawing.h}!wrtchr@{wrtchr}}
+\index{wrtchr@{wrtchr}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{wrtchr()}{wrtchr()}}
+{\footnotesize\ttfamily void wrtchr (\begin{DoxyParamCaption}\item[{char}]{chr }\end{DoxyParamCaption})}
+
+Prints the character {\bfseries{chr}} in the default font at the current text position.
+
+The current position is advanced by 1 after the character is printed. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}{gotogxy()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}\label{drawing_8h_a2d6cbdc9528ec11ac54bd3dbe754ab74}}
+\index{drawing.h@{drawing.h}!gotogxy@{gotogxy}}
+\index{gotogxy@{gotogxy}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{gotogxy()}{gotogxy()}}
+{\footnotesize\ttfamily void gotogxy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Sets the current text position to {\bfseries{x,y}}.
+
+Note\+: {\bfseries{x}} and {\bfseries{y}} have units of tiles (8 pixels per unit) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{drawing_8h_a9178e678a17cb08653600f435093ae2a}{wrtchr()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{drawing_8h_a9fa68d25be92836a1b08a5e610b4f32f}\label{drawing_8h_a9fa68d25be92836a1b08a5e610b4f32f}}
+\index{drawing.h@{drawing.h}!color@{color}}
+\index{color@{color}!drawing.h@{drawing.h}}
+\doxyparagraph{\texorpdfstring{color()}{color()}}
+{\footnotesize\ttfamily void color (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{forecolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{backcolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{mode }\end{DoxyParamCaption})}
+
+Set the current {\bfseries{foreground}} colour (for pixels), {\bfseries{background}} colour, and draw {\bfseries{mode}}
\ No newline at end of file
diff --git a/docs/latex/emu__debug_8h.tex b/docs/latex/emu__debug_8h.tex
new file mode 100644
index 00000000..0f1d1a7f
--- /dev/null
+++ b/docs/latex/emu__debug_8h.tex
@@ -0,0 +1,206 @@
+\hypertarget{emu__debug_8h}{}\doxysubsection{gb/emu\+\_\+debug.h File Reference}
+\label{emu__debug_8h}\index{gb/emu\_debug.h@{gb/emu\_debug.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE}}(message\+\_\+text)~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E1(E\+M\+U\+\_\+\+M\+A\+C\+R\+O\+N\+A\+ME(\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+), message\+\_\+text)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_aabd48c83af8f69ed624bb8a83347fa39}{B\+G\+B\+\_\+\+M\+E\+S\+S\+A\+GE}}(message\+\_\+text)~\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE}}(message\+\_\+text)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN}}(M\+SG)~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+U\+F\+F\+IX(M\+SG, \char`\"{}\%Z\+E\+R\+O\+C\+L\+KS\%\char`\"{});
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_ab5b05deda52856c84f274fb28578b6ee}{B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN}}(M\+SG)~\mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN}}(M\+SG)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND}}(M\+SG)~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+U\+F\+F\+IX(M\+SG,\char`\"{}\%-\/8+L\+A\+S\+T\+C\+L\+KS\%\char`\"{});
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_ab43f94064dc523e99c4aefb440e2c3ed}{B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND}}(M\+SG)~\mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND}}(M\+SG)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_ad1ca656789d7d285b352afeaa4cc56bd}{E\+M\+U\+\_\+\+T\+E\+XT}}(M\+SG)~\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE}}(M\+SG)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a6afa665bd7d093e7ca2d310cc92b08a9}{B\+G\+B\+\_\+\+T\+E\+XT}}(M\+SG)~\mbox{\hyperlink{emu__debug_8h_ad1ca656789d7d285b352afeaa4cc56bd}{E\+M\+U\+\_\+\+T\+E\+XT}}(M\+SG)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a47c147586d9a21282ce72a83947508e9}{B\+G\+B\+\_\+profiler\+\_\+message}}()~\mbox{\hyperlink{emu__debug_8h_a1e2adc0111203ce0f551bcb1d99395df}{E\+M\+U\+\_\+profiler\+\_\+message}}()
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a892ddea0cd396141c1ae05e384303cbf}{B\+G\+B\+\_\+printf}}(...)~\mbox{\hyperlink{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}{E\+M\+U\+\_\+printf}}(\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a9e856b4691d63bb41c5148b9097bd2bb}{E\+M\+U\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT}}~\+\_\+\+\_\+asm\+\_\+\+\_\+(\char`\"{}ld \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}, \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}\char`\"{});
+\item
+\#define \mbox{\hyperlink{emu__debug_8h_a95c9ae3faadfe6f93a3cac87085b3481}{B\+G\+B\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT}}~\mbox{\hyperlink{emu__debug_8h_a9e856b4691d63bb41c5148b9097bd2bb}{E\+M\+U\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{emu__debug_8h_a1e2adc0111203ce0f551bcb1d99395df}{E\+M\+U\+\_\+profiler\+\_\+message}} ()
+\item
+void \mbox{\hyperlink{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}{E\+M\+U\+\_\+printf}} (const char $\ast$format,...) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Debug window logging and profiling support for emulators (B\+GB, Emulicious, etc).
+
+Also see the {\ttfamily emu\+\_\+debug} example project included with gbdk.
+
+See the B\+GB Manual for more information (\char`\"{}expressions, breakpoint conditions, and debug messages\char`\"{}) \href{http://bgb.bircd.org/manual.html\#expressions}{\texttt{ http\+://bgb.\+bircd.\+org/manual.\+html\#expressions}}
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}\label{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_MESSAGE@{EMU\_MESSAGE}}
+\index{EMU\_MESSAGE@{EMU\_MESSAGE}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_MESSAGE}{EMU\_MESSAGE}}
+{\footnotesize\ttfamily \#define E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE(\begin{DoxyParamCaption}\item[{}]{message\+\_\+text }\end{DoxyParamCaption})~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E1(E\+M\+U\+\_\+\+M\+A\+C\+R\+O\+N\+A\+ME(\+\_\+\+\_\+\+L\+I\+N\+E\+\_\+\+\_\+), message\+\_\+text)}
+
+Macro to display a message in the emulator debug message window
+
+
+\begin{DoxyParams}{Parameters}
+{\em message\+\_\+text} & Quoted text string to display in the debug message window\\
+\hline
+\end{DoxyParams}
+The following special parameters can be used when bracketed with \char`\"{}\%\char`\"{} characters. \begin{DoxyItemize}
+\item C\+PU registers\+: AF, BC, DE, HL, SP, PC, B, C, D, E, H, L, A, Z\+E\+RO, ZF, Z, C\+A\+R\+RY, CY, I\+ME, A\+L\+L\+R\+E\+GS \item Other state values\+: R\+O\+M\+B\+A\+NK, X\+R\+A\+M\+B\+A\+NK, S\+R\+A\+M\+B\+A\+NK, W\+R\+A\+M\+B\+A\+NK, V\+R\+A\+M\+B\+A\+NK, T\+O\+T\+A\+L\+C\+L\+KS, L\+A\+S\+T\+C\+L\+KS, C\+L\+K\+S2\+V\+B\+L\+A\+NK\end{DoxyItemize}
+Example\+: print a message along with the currently active R\+OM bank.
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{EMU\_MESSAGE}}(\textcolor{stringliteral}{"{}Current ROM Bank is: \%ROMBANK\%"{}});}
+\end{DoxyCode}
+
+
+See the B\+GB Manual for more information (\char`\"{}expressions, breakpoint conditions, and debug messages\char`\"{}) \href{http://bgb.bircd.org/manual.html\#expressions}{\texttt{ http\+://bgb.\+bircd.\+org/manual.\+html\#expressions}}
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+I\+N()}}, \mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+N\+D()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{emu__debug_8h_aabd48c83af8f69ed624bb8a83347fa39}\label{emu__debug_8h_aabd48c83af8f69ed624bb8a83347fa39}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_MESSAGE@{BGB\_MESSAGE}}
+\index{BGB\_MESSAGE@{BGB\_MESSAGE}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_MESSAGE}{BGB\_MESSAGE}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+\+M\+E\+S\+S\+A\+GE(\begin{DoxyParamCaption}\item[{}]{message\+\_\+text }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE}}(message\+\_\+text)}
+
+\mbox{\Hypertarget{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}\label{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_PROFILE\_BEGIN@{EMU\_PROFILE\_BEGIN}}
+\index{EMU\_PROFILE\_BEGIN@{EMU\_PROFILE\_BEGIN}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_PROFILE\_BEGIN}{EMU\_PROFILE\_BEGIN}}
+{\footnotesize\ttfamily \#define E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+U\+F\+F\+IX(M\+SG, \char`\"{}\%Z\+E\+R\+O\+C\+L\+KS\%\char`\"{});}
+
+Macro to {\bfseries{Start}} a profiling block for the emulator (B\+GB, Emulicious, etc)
+
+
+\begin{DoxyParams}{Parameters}
+{\em M\+SG} & Quoted text string to display in the debug message window along with the result\\
+\hline
+\end{DoxyParams}
+To complete the profiling block and print the result call \mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+N\+D()}}, \mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{emu__debug_8h_ab5b05deda52856c84f274fb28578b6ee}\label{emu__debug_8h_ab5b05deda52856c84f274fb28578b6ee}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_PROFILE\_BEGIN@{BGB\_PROFILE\_BEGIN}}
+\index{BGB\_PROFILE\_BEGIN@{BGB\_PROFILE\_BEGIN}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_PROFILE\_BEGIN}{BGB\_PROFILE\_BEGIN}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+IN}}(M\+SG)}
+
+\mbox{\Hypertarget{emu__debug_8h_acce78126775a7ca3c862459e28203aba}\label{emu__debug_8h_acce78126775a7ca3c862459e28203aba}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_PROFILE\_END@{EMU\_PROFILE\_END}}
+\index{EMU\_PROFILE\_END@{EMU\_PROFILE\_END}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_PROFILE\_END}{EMU\_PROFILE\_END}}
+{\footnotesize\ttfamily \#define E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E\+\_\+\+S\+U\+F\+F\+IX(M\+SG,\char`\"{}\%-\/8+L\+A\+S\+T\+C\+L\+KS\%\char`\"{});}
+
+Macro to {\bfseries{End}} a profiling block and print the results in the emulator debug message window
+
+
+\begin{DoxyParams}{Parameters}
+{\em M\+SG} & Quoted text string to display in the debug message window along with the result\\
+\hline
+\end{DoxyParams}
+This should only be called after a previous call to \mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+I\+N()}}
+
+The results are in Emulator clock units, which are \char`\"{}1 nop in \mbox{[}\+C\+G\+B\mbox{]} doublespeed mode\char`\"{}.
+
+So when running in Normal Speed mode (i.\+e. non-\/\+C\+GB doublespeed) the printed result should be {\bfseries{divided by 2}} to get the actual ellapsed cycle count.
+
+If running in CB Double Speed mode use the below call instead, it correctly compensates for the speed difference. In this scenario, the result does {\bfseries{not need to be divided by 2}} to get the ellapsed cycle count.
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{EMU\_MESSAGE}}(\textcolor{stringliteral}{"{}NOP TIME: \%-\/4+LASTCLKS\%"{}});}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{emu__debug_8h_a5359c3e6ddab89f41f1de770cc3640d4}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+B\+E\+G\+I\+N()}}, \mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+G\+E()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{emu__debug_8h_ab43f94064dc523e99c4aefb440e2c3ed}\label{emu__debug_8h_ab43f94064dc523e99c4aefb440e2c3ed}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_PROFILE\_END@{BGB\_PROFILE\_END}}
+\index{BGB\_PROFILE\_END@{BGB\_PROFILE\_END}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_PROFILE\_END}{BGB\_PROFILE\_END}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_acce78126775a7ca3c862459e28203aba}{E\+M\+U\+\_\+\+P\+R\+O\+F\+I\+L\+E\+\_\+\+E\+ND}}(M\+SG)}
+
+\mbox{\Hypertarget{emu__debug_8h_ad1ca656789d7d285b352afeaa4cc56bd}\label{emu__debug_8h_ad1ca656789d7d285b352afeaa4cc56bd}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_TEXT@{EMU\_TEXT}}
+\index{EMU\_TEXT@{EMU\_TEXT}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_TEXT}{EMU\_TEXT}}
+{\footnotesize\ttfamily \#define E\+M\+U\+\_\+\+T\+E\+XT(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{E\+M\+U\+\_\+\+M\+E\+S\+S\+A\+GE}}(M\+SG)}
+
+\mbox{\Hypertarget{emu__debug_8h_a6afa665bd7d093e7ca2d310cc92b08a9}\label{emu__debug_8h_a6afa665bd7d093e7ca2d310cc92b08a9}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_TEXT@{BGB\_TEXT}}
+\index{BGB\_TEXT@{BGB\_TEXT}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_TEXT}{BGB\_TEXT}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+\+T\+E\+XT(\begin{DoxyParamCaption}\item[{}]{M\+SG }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_ad1ca656789d7d285b352afeaa4cc56bd}{E\+M\+U\+\_\+\+T\+E\+XT}}(M\+SG)}
+
+\mbox{\Hypertarget{emu__debug_8h_a47c147586d9a21282ce72a83947508e9}\label{emu__debug_8h_a47c147586d9a21282ce72a83947508e9}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_profiler\_message@{BGB\_profiler\_message}}
+\index{BGB\_profiler\_message@{BGB\_profiler\_message}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_profiler\_message}{BGB\_profiler\_message}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+profiler\+\_\+message(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_a1e2adc0111203ce0f551bcb1d99395df}{E\+M\+U\+\_\+profiler\+\_\+message}}()}
+
+\mbox{\Hypertarget{emu__debug_8h_a892ddea0cd396141c1ae05e384303cbf}\label{emu__debug_8h_a892ddea0cd396141c1ae05e384303cbf}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_printf@{BGB\_printf}}
+\index{BGB\_printf@{BGB\_printf}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_printf}{BGB\_printf}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+printf(\begin{DoxyParamCaption}\item[{}]{... }\end{DoxyParamCaption})~\mbox{\hyperlink{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}{E\+M\+U\+\_\+printf}}(\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+)}
+
+\mbox{\Hypertarget{emu__debug_8h_a9e856b4691d63bb41c5148b9097bd2bb}\label{emu__debug_8h_a9e856b4691d63bb41c5148b9097bd2bb}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_BREAKPOINT@{EMU\_BREAKPOINT}}
+\index{EMU\_BREAKPOINT@{EMU\_BREAKPOINT}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_BREAKPOINT}{EMU\_BREAKPOINT}}
+{\footnotesize\ttfamily \#define E\+M\+U\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT~\+\_\+\+\_\+asm\+\_\+\+\_\+(\char`\"{}ld \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}, \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}\char`\"{});}
+
+The Emulator will break into debugger when encounters this line \mbox{\Hypertarget{emu__debug_8h_a95c9ae3faadfe6f93a3cac87085b3481}\label{emu__debug_8h_a95c9ae3faadfe6f93a3cac87085b3481}}
+\index{emu\_debug.h@{emu\_debug.h}!BGB\_BREAKPOINT@{BGB\_BREAKPOINT}}
+\index{BGB\_BREAKPOINT@{BGB\_BREAKPOINT}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{BGB\_BREAKPOINT}{BGB\_BREAKPOINT}}
+{\footnotesize\ttfamily \#define B\+G\+B\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT~\mbox{\hyperlink{emu__debug_8h_a9e856b4691d63bb41c5148b9097bd2bb}{E\+M\+U\+\_\+\+B\+R\+E\+A\+K\+P\+O\+I\+NT}}}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{emu__debug_8h_a1e2adc0111203ce0f551bcb1d99395df}\label{emu__debug_8h_a1e2adc0111203ce0f551bcb1d99395df}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_profiler\_message@{EMU\_profiler\_message}}
+\index{EMU\_profiler\_message@{EMU\_profiler\_message}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_profiler\_message()}{EMU\_profiler\_message()}}
+{\footnotesize\ttfamily void E\+M\+U\+\_\+profiler\+\_\+message (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Display preset debug information in the Emulator debug messages window.
+
+This function is equivalent to\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\mbox{\hyperlink{emu__debug_8h_a5624be3849bf5308c6cc05bc4a624557}{EMU\_MESSAGE}}(\textcolor{stringliteral}{"{}PROFILE,\%(SP+\$0)\%,\%(SP+\$1)\%,\%A\%,\%TOTALCLKS\%,\%ROMBANK\%,\%WRAMBANK\%"{}});}
+\end{DoxyCode}
+ \mbox{\Hypertarget{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}\label{emu__debug_8h_a586ce1ddfba9c35726887ca31f933963}}
+\index{emu\_debug.h@{emu\_debug.h}!EMU\_printf@{EMU\_printf}}
+\index{EMU\_printf@{EMU\_printf}!emu\_debug.h@{emu\_debug.h}}
+\doxyparagraph{\texorpdfstring{EMU\_printf()}{EMU\_printf()}}
+{\footnotesize\ttfamily void E\+M\+U\+\_\+printf (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})}
+
+Print the string and arguments given by format to the emulator debug message window
+
+
+\begin{DoxyParams}{Parameters}
+{\em format} & The format string as per printf\\
+\hline
+\end{DoxyParams}
+Does not return the number of characters printed. Result string M\+U\+ST BE L\+E\+SS OR E\+Q\+U\+AL T\+H\+AN 128 B\+Y\+T\+ES L\+O\+NG, I\+N\+C\+L\+U\+D\+I\+NG T\+HE T\+R\+A\+I\+L\+IG Z\+E\+RO B\+Y\+T\+E!
+
+Currently supported\+: \begin{DoxyItemize}
+\item \%hx (char as hex) \item \%hu (unsigned char) \item \%hd (signed char) \item \%c (character) \item \%u (unsigned int) \item \%d (signed int) \item \%x (unsigned int as hex) \item \%s (string)\end{DoxyItemize}
+Warning\+: to correctly pass chars for printing as chars, they {\itshape must} be explicitly re-\/cast as such when calling the function. See \mbox{\hyperlink{docs_coding_guidelines_docs_chars_varargs}{docs\+\_\+chars\+\_\+varargs}} for more details.
\ No newline at end of file
diff --git a/docs/latex/far__ptr_8h.tex b/docs/latex/far__ptr_8h.tex
new file mode 100644
index 00000000..81c39cae
--- /dev/null
+++ b/docs/latex/far__ptr_8h.tex
@@ -0,0 +1,194 @@
+\hypertarget{far__ptr_8h}{}\doxysubsection{gbdk/far\+\_\+ptr.h File Reference}
+\label{far__ptr_8h}\index{gbdk/far\_ptr.h@{gbdk/far\_ptr.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{far__ptr_8h_a0c227677a96f9bf7e84a90922f2f8708}{T\+O\+\_\+\+F\+A\+R\+\_\+\+P\+TR}}(ofs, seg)~(((\mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})seg $<$$<$ 16) $\vert$ (\mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})ofs)
+\item
+\#define \mbox{\hyperlink{far__ptr_8h_a5bebc5322a1bba1c60c8d60e9b58be14}{F\+A\+R\+\_\+\+S\+EG}}(ptr)~(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segofs.\+seg)
+\item
+\#define \mbox{\hyperlink{far__ptr_8h_ab79586d8cc3cb926f363f4d0cf7143d5}{F\+A\+R\+\_\+\+O\+FS}}(ptr)~(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segofs.\+ofs)
+\item
+\#define \mbox{\hyperlink{far__ptr_8h_a048cfacb5d37ab758a74f44e86c1dbc6}{F\+A\+R\+\_\+\+F\+U\+NC}}(ptr, typ)~((typ)(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segfn.\+fn))
+\item
+\#define \mbox{\hyperlink{far__ptr_8h_a7f4ab1893ea392f8bf042a3b97de4730}{F\+A\+R\+\_\+\+C\+A\+LL}}(ptr, typ, ...)~(\mbox{\hyperlink{far__ptr_8h_a27792b7fc3796a1e1828d4c5812e5b21}{\+\_\+\+\_\+call\+\_\+banked\+\_\+ptr}}=ptr,((typ)(\&\mbox{\hyperlink{far__ptr_8h_aa45a2312a2584abb8733a052f66b4a90}{\+\_\+\+\_\+call\+\_\+\+\_\+banked}}))(\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+))
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{far__ptr_8h_aa45a2312a2584abb8733a052f66b4a90}{\+\_\+\+\_\+call\+\_\+\+\_\+banked}} ()
+\item
+\mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{far__ptr_8h_a23ab15f7eb85a48d72f717183badb110}{to\+\_\+far\+\_\+ptr}} (void $\ast$ofs, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} seg) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+volatile \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}} \mbox{\hyperlink{far__ptr_8h_a27792b7fc3796a1e1828d4c5812e5b21}{\+\_\+\+\_\+call\+\_\+banked\+\_\+ptr}}
+\item
+volatile void $\ast$ \mbox{\hyperlink{far__ptr_8h_a1344c26ca298a9eadea4bcfea6442ae3}{\+\_\+\+\_\+call\+\_\+banked\+\_\+addr}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{far__ptr_8h_a892433d652420445a9a6aebf1a256623}{\+\_\+\+\_\+call\+\_\+banked\+\_\+bank}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Far pointers include a segment (bank) selector so they are able to point to addresses (functions or data) outside of the current bank (unlike normal pointers which are not bank-\/aware).
+
+See the {\ttfamily banks\+\_\+farptr} example project included with gbdk.
+
+\begin{DoxyRefDesc}{Todo}
+\item[\mbox{\hyperlink{todo__todo000001}{Todo}}]Add link to a discussion about banking (such as, how to assign code and variables to banks) \end{DoxyRefDesc}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{far__ptr_8h_a0c227677a96f9bf7e84a90922f2f8708}\label{far__ptr_8h_a0c227677a96f9bf7e84a90922f2f8708}}
+\index{far\_ptr.h@{far\_ptr.h}!TO\_FAR\_PTR@{TO\_FAR\_PTR}}
+\index{TO\_FAR\_PTR@{TO\_FAR\_PTR}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{TO\_FAR\_PTR}{TO\_FAR\_PTR}}
+{\footnotesize\ttfamily \#define T\+O\+\_\+\+F\+A\+R\+\_\+\+P\+TR(\begin{DoxyParamCaption}\item[{}]{ofs, }\item[{}]{seg }\end{DoxyParamCaption})~(((\mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})seg $<$$<$ 16) $\vert$ (\mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})ofs)}
+
+Macro to obtain a far pointer at compile-\/time
+\begin{DoxyParams}{Parameters}
+{\em ofs} & Memory address within the given Segment (Bank) \\
+\hline
+{\em seg} & Segment (Bank) number\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A far pointer (type \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})
+\end{DoxyReturn}
+\mbox{\Hypertarget{far__ptr_8h_a5bebc5322a1bba1c60c8d60e9b58be14}\label{far__ptr_8h_a5bebc5322a1bba1c60c8d60e9b58be14}}
+\index{far\_ptr.h@{far\_ptr.h}!FAR\_SEG@{FAR\_SEG}}
+\index{FAR\_SEG@{FAR\_SEG}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{FAR\_SEG}{FAR\_SEG}}
+{\footnotesize\ttfamily \#define F\+A\+R\+\_\+\+S\+EG(\begin{DoxyParamCaption}\item[{}]{ptr }\end{DoxyParamCaption})~(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segofs.\+seg)}
+
+Macro to get the Segment (Bank) number of a far pointer
+\begin{DoxyParams}{Parameters}
+{\em ptr} & A far pointer (type \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Segment (Bank) of the far pointer (type uint16\+\_\+t)
+\end{DoxyReturn}
+\mbox{\Hypertarget{far__ptr_8h_ab79586d8cc3cb926f363f4d0cf7143d5}\label{far__ptr_8h_ab79586d8cc3cb926f363f4d0cf7143d5}}
+\index{far\_ptr.h@{far\_ptr.h}!FAR\_OFS@{FAR\_OFS}}
+\index{FAR\_OFS@{FAR\_OFS}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{FAR\_OFS}{FAR\_OFS}}
+{\footnotesize\ttfamily \#define F\+A\+R\+\_\+\+O\+FS(\begin{DoxyParamCaption}\item[{}]{ptr }\end{DoxyParamCaption})~(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segofs.\+ofs)}
+
+Macro to get the Offset (address) of a far pointer
+\begin{DoxyParams}{Parameters}
+{\em ptr} & A far pointer (type \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Offset (address) of the far pointer (type void $\ast$)
+\end{DoxyReturn}
+\mbox{\Hypertarget{far__ptr_8h_a048cfacb5d37ab758a74f44e86c1dbc6}\label{far__ptr_8h_a048cfacb5d37ab758a74f44e86c1dbc6}}
+\index{far\_ptr.h@{far\_ptr.h}!FAR\_FUNC@{FAR\_FUNC}}
+\index{FAR\_FUNC@{FAR\_FUNC}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{FAR\_FUNC}{FAR\_FUNC}}
+{\footnotesize\ttfamily \#define F\+A\+R\+\_\+\+F\+U\+NC(\begin{DoxyParamCaption}\item[{}]{ptr, }\item[{}]{typ }\end{DoxyParamCaption})~((typ)(((union \mbox{\hyperlink{union____far__ptr}{\+\_\+\+\_\+far\+\_\+ptr}} $\ast$)\&ptr)-\/$>$segfn.\+fn))}
+
+\mbox{\Hypertarget{far__ptr_8h_a7f4ab1893ea392f8bf042a3b97de4730}\label{far__ptr_8h_a7f4ab1893ea392f8bf042a3b97de4730}}
+\index{far\_ptr.h@{far\_ptr.h}!FAR\_CALL@{FAR\_CALL}}
+\index{FAR\_CALL@{FAR\_CALL}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{FAR\_CALL}{FAR\_CALL}}
+{\footnotesize\ttfamily \#define F\+A\+R\+\_\+\+C\+A\+LL(\begin{DoxyParamCaption}\item[{}]{ptr, }\item[{}]{typ, }\item[{}]{... }\end{DoxyParamCaption})~(\mbox{\hyperlink{far__ptr_8h_a27792b7fc3796a1e1828d4c5812e5b21}{\+\_\+\+\_\+call\+\_\+banked\+\_\+ptr}}=ptr,((typ)(\&\mbox{\hyperlink{far__ptr_8h_aa45a2312a2584abb8733a052f66b4a90}{\+\_\+\+\_\+call\+\_\+\+\_\+banked}}))(\+\_\+\+\_\+\+V\+A\+\_\+\+A\+R\+G\+S\+\_\+\+\_\+))}
+
+Macro to call a function at far pointer {\bfseries{ptr}} of type {\bfseries{typ}}
+\begin{DoxyParams}{Parameters}
+{\em ptr} & Far pointer of a function to call (type \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}}) \\
+\hline
+{\em typ} & Type to cast the function far pointer to. \\
+\hline
+{\em ...} & VA Args list of parameters for the function\\
+\hline
+\end{DoxyParams}
+{\bfseries{type}} should match the definition of the function being called. For example\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{comment}{// A function in bank 2}}
+\DoxyCodeLine{\textcolor{preprocessor}{\#pragma bank 2}}
+\DoxyCodeLine{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} some\_function(\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} param1, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} param2) \_\_banked \{ \textcolor{keywordflow}{return} 1; \};}
+\DoxyCodeLine{}
+\DoxyCodeLine{...}
+\DoxyCodeLine{\textcolor{comment}{// Code elsewhere, such as unbanked main()}}
+\DoxyCodeLine{\textcolor{comment}{// This type declaration should match the above function}}
+\DoxyCodeLine{typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} (*some\_function\_t)(\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}}, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}}) \_\_banked;}
+\DoxyCodeLine{}
+\DoxyCodeLine{\textcolor{comment}{// Using FAR\_CALL() with the above as *ptr*, *typ*, and two parameters.}}
+\DoxyCodeLine{result = \mbox{\hyperlink{far__ptr_8h_a7f4ab1893ea392f8bf042a3b97de4730}{FAR\_CALL}}(some\_function, some\_function\_t, 100, 50);}
+\end{DoxyCode}
+
+
+\begin{DoxyReturn}{Returns}
+Value returned by the function (if present)
+\end{DoxyReturn}
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}\label{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}}
+\index{far\_ptr.h@{far\_ptr.h}!FAR\_PTR@{FAR\_PTR}}
+\index{FAR\_PTR@{FAR\_PTR}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{FAR\_PTR}{FAR\_PTR}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}}}
+
+Type for storing a F\+A\+R\+\_\+\+P\+TR
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{far__ptr_8h_aa45a2312a2584abb8733a052f66b4a90}\label{far__ptr_8h_aa45a2312a2584abb8733a052f66b4a90}}
+\index{far\_ptr.h@{far\_ptr.h}!\_\_call\_\_banked@{\_\_call\_\_banked}}
+\index{\_\_call\_\_banked@{\_\_call\_\_banked}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{\_\_call\_\_banked()}{\_\_call\_\_banked()}}
+{\footnotesize\ttfamily void \+\_\+\+\_\+call\+\_\+\+\_\+banked (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{far__ptr_8h_a23ab15f7eb85a48d72f717183badb110}\label{far__ptr_8h_a23ab15f7eb85a48d72f717183badb110}}
+\index{far\_ptr.h@{far\_ptr.h}!to\_far\_ptr@{to\_far\_ptr}}
+\index{to\_far\_ptr@{to\_far\_ptr}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{to\_far\_ptr()}{to\_far\_ptr()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}} to\+\_\+far\+\_\+ptr (\begin{DoxyParamCaption}\item[{void $\ast$}]{ofs, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{seg }\end{DoxyParamCaption})}
+
+Obtain a far pointer at runtime
+\begin{DoxyParams}{Parameters}
+{\em ofs} & Memory address within the given Segment (Bank) \\
+\hline
+{\em seg} & Segment (Bank) number\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A far pointer (type \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}})
+\end{DoxyReturn}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{far__ptr_8h_a27792b7fc3796a1e1828d4c5812e5b21}\label{far__ptr_8h_a27792b7fc3796a1e1828d4c5812e5b21}}
+\index{far\_ptr.h@{far\_ptr.h}!\_\_call\_banked\_ptr@{\_\_call\_banked\_ptr}}
+\index{\_\_call\_banked\_ptr@{\_\_call\_banked\_ptr}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{\_\_call\_banked\_ptr}{\_\_call\_banked\_ptr}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}} \+\_\+\+\_\+call\+\_\+banked\+\_\+ptr\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{far__ptr_8h_a1344c26ca298a9eadea4bcfea6442ae3}\label{far__ptr_8h_a1344c26ca298a9eadea4bcfea6442ae3}}
+\index{far\_ptr.h@{far\_ptr.h}!\_\_call\_banked\_addr@{\_\_call\_banked\_addr}}
+\index{\_\_call\_banked\_addr@{\_\_call\_banked\_addr}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{\_\_call\_banked\_addr}{\_\_call\_banked\_addr}}
+{\footnotesize\ttfamily volatile void$\ast$ \+\_\+\+\_\+call\+\_\+banked\+\_\+addr\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{far__ptr_8h_a892433d652420445a9a6aebf1a256623}\label{far__ptr_8h_a892433d652420445a9a6aebf1a256623}}
+\index{far\_ptr.h@{far\_ptr.h}!\_\_call\_banked\_bank@{\_\_call\_banked\_bank}}
+\index{\_\_call\_banked\_bank@{\_\_call\_banked\_bank}!far\_ptr.h@{far\_ptr.h}}
+\doxyparagraph{\texorpdfstring{\_\_call\_banked\_bank}{\_\_call\_banked\_bank}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+\+\_\+call\+\_\+banked\+\_\+bank\hspace{0.3cm}{\ttfamily [extern]}}
+
diff --git a/docs/latex/files.tex b/docs/latex/files.tex
new file mode 100644
index 00000000..76cc3e75
--- /dev/null
+++ b/docs/latex/files.tex
@@ -0,0 +1,56 @@
+\doxysubsection{File List}
+Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{assert_8h}{assert.\+h}} }{\pageref{assert_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{ctype_8h}{ctype.\+h}} }{\pageref{ctype_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{limits_8h}{limits.\+h}} }{\pageref{limits_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{rand_8h}{rand.\+h}} }{\pageref{rand_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{setjmp_8h}{setjmp.\+h}} }{\pageref{setjmp_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdarg_8h}{stdarg.\+h}} }{\pageref{stdarg_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdatomic_8h}{stdatomic.\+h}} }{\pageref{stdatomic_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdbool_8h}{stdbool.\+h}} }{\pageref{stdbool_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stddef_8h}{stddef.\+h}} }{\pageref{stddef_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdint_8h}{stdint.\+h}} }{\pageref{stdint_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdio_8h}{stdio.\+h}} }{\pageref{stdio_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdlib_8h}{stdlib.\+h}} }{\pageref{stdlib_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{stdnoreturn_8h}{stdnoreturn.\+h}} }{\pageref{stdnoreturn_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{string_8h}{string.\+h}} }{\pageref{string_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{time_8h}{time.\+h}} }{\pageref{time_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{typeof_8h}{typeof.\+h}} }{\pageref{typeof_8h}}{}
+\item\contentsline{section}{\mbox{\hyperlink{types_8h}{types.\+h}} }{\pageref{types_8h}}{}
+\item\contentsline{section}{asm/\mbox{\hyperlink{asm_2types_8h}{types.\+h}} }{\pageref{asm_2types_8h}}{}
+\item\contentsline{section}{asm/gbz80/\mbox{\hyperlink{gbz80_2provides_8h}{provides.\+h}} }{\pageref{gbz80_2provides_8h}}{}
+\item\contentsline{section}{asm/gbz80/\mbox{\hyperlink{asm_2gbz80_2stdarg_8h}{stdarg.\+h}} }{\pageref{asm_2gbz80_2stdarg_8h}}{}
+\item\contentsline{section}{asm/gbz80/\mbox{\hyperlink{asm_2gbz80_2string_8h}{string.\+h}} }{\pageref{asm_2gbz80_2string_8h}}{}
+\item\contentsline{section}{asm/gbz80/\mbox{\hyperlink{asm_2gbz80_2types_8h}{types.\+h}} }{\pageref{asm_2gbz80_2types_8h}}{}
+\item\contentsline{section}{asm/z80/\mbox{\hyperlink{z80_2provides_8h}{provides.\+h}} }{\pageref{z80_2provides_8h}}{}
+\item\contentsline{section}{asm/z80/\mbox{\hyperlink{asm_2z80_2stdarg_8h}{stdarg.\+h}} }{\pageref{asm_2z80_2stdarg_8h}}{}
+\item\contentsline{section}{asm/z80/\mbox{\hyperlink{asm_2z80_2string_8h}{string.\+h}} }{\pageref{asm_2z80_2string_8h}}{}
+\item\contentsline{section}{asm/z80/\mbox{\hyperlink{asm_2z80_2types_8h}{types.\+h}} }{\pageref{asm_2z80_2types_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{bcd_8h}{bcd.\+h}} }{\pageref{bcd_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{bgb__emu_8h}{bgb\+\_\+emu.\+h}} }{\pageref{bgb__emu_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{cgb_8h}{cgb.\+h}} }{\pageref{cgb_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{crash__handler_8h}{crash\+\_\+handler.\+h}} }{\pageref{crash__handler_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{drawing_8h}{drawing.\+h}} }{\pageref{drawing_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{emu__debug_8h}{emu\+\_\+debug.\+h}} }{\pageref{emu__debug_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{gb_8h}{gb.\+h}} }{\pageref{gb_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{gb_2gbdecompress_8h}{gbdecompress.\+h}} }{\pageref{gb_2gbdecompress_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{gb_2hardware_8h}{hardware.\+h}} }{\pageref{gb_2hardware_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{isr_8h}{isr.\+h}} }{\pageref{isr_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{gb_2metasprites_8h}{metasprites.\+h}} }{\pageref{gb_2metasprites_8h}}{}
+\item\contentsline{section}{gb/\mbox{\hyperlink{sgb_8h}{sgb.\+h}} }{\pageref{sgb_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{k_2bcd_8h}{bcd.\+h}} }{\pageref{k_2bcd_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{console_8h}{console.\+h}} }{\pageref{console_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{far__ptr_8h}{far\+\_\+ptr.\+h}} }{\pageref{far__ptr_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{font_8h}{font.\+h}} }{\pageref{font_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{gbdk_2gbdecompress_8h}{gbdecompress.\+h}} }{\pageref{gbdk_2gbdecompress_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{gbdk-lib_8h}{gbdk-\/lib.\+h}} }{\pageref{gbdk-lib_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{incbin_8h}{incbin.\+h}} }{\pageref{incbin_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{gbdk_2metasprites_8h}{metasprites.\+h}} }{\pageref{gbdk_2metasprites_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{platform_8h}{platform.\+h}} }{\pageref{platform_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{rledecompress_8h}{rledecompress.\+h}} }{\pageref{rledecompress_8h}}{}
+\item\contentsline{section}{gbdk/\mbox{\hyperlink{version_8h}{version.\+h}} }{\pageref{version_8h}}{}
+\item\contentsline{section}{sms/\mbox{\hyperlink{sms_2gbdecompress_8h}{gbdecompress.\+h}} }{\pageref{sms_2gbdecompress_8h}}{}
+\item\contentsline{section}{sms/\mbox{\hyperlink{sms_2hardware_8h}{hardware.\+h}} }{\pageref{sms_2hardware_8h}}{}
+\item\contentsline{section}{sms/\mbox{\hyperlink{sms_2metasprites_8h}{metasprites.\+h}} }{\pageref{sms_2metasprites_8h}}{}
+\item\contentsline{section}{sms/\mbox{\hyperlink{sms_8h}{sms.\+h}} }{\pageref{sms_8h}}{}
+\end{DoxyCompactList}
diff --git a/docs/latex/font_8h.tex b/docs/latex/font_8h.tex
new file mode 100644
index 00000000..bc672b9f
--- /dev/null
+++ b/docs/latex/font_8h.tex
@@ -0,0 +1,154 @@
+\hypertarget{font_8h}{}\doxysubsection{gbdk/font.h File Reference}
+\label{font_8h}\index{gbdk/font.h@{gbdk/font.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{font_8h_a63b93b85724b26151ddc2f0fc8050bd8}{F\+O\+N\+T\+\_\+256\+E\+N\+C\+O\+D\+I\+NG}}~0
+\item
+\#define \mbox{\hyperlink{font_8h_a305ee4387ba051bd0e372b8a6dfb6905}{F\+O\+N\+T\+\_\+128\+E\+N\+C\+O\+D\+I\+NG}}~1
+\item
+\#define \mbox{\hyperlink{font_8h_a80d0f581e17313b62dd7824653462b55}{F\+O\+N\+T\+\_\+\+N\+O\+E\+N\+C\+O\+D\+I\+NG}}~2
+\item
+\#define \mbox{\hyperlink{font_8h_a7c5452979723b3535d17e253beb5d604}{F\+O\+N\+T\+\_\+\+C\+O\+M\+P\+R\+E\+S\+S\+ED}}~4
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}}
+\item
+typedef struct \mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}} \mbox{\hyperlink{font_8h_aea1f63fe2ea8c7689b061ad93b485553}{mfont\+\_\+handle}}
+\item
+typedef struct \mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}} $\ast$ \mbox{\hyperlink{font_8h_a82e0e078fc8a8b6a18538131625dba3a}{pmfont\+\_\+handle}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{font_8h_a6b0459241994d549ae90776cdacede2d}{font\+\_\+init}} ()
+\item
+\mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}} \mbox{\hyperlink{font_8h_ad089c09492dbd0423f4dd28f1a49a995}{font\+\_\+load}} (void $\ast$font) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}} \mbox{\hyperlink{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}{font\+\_\+set}} (\mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}} font\+\_\+handle) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{font_8h_a47b4964ef677dce9fdf1e9df29804721}{font\+\_\+color}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} forecolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} backcolor) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga1b59bbd85c12436eeef52d4c32c7345d}{font\+\_\+spect}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga17e825a65ba38f34a658fe0a2c99d8d4}{font\+\_\+italic}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga6dcb04fed78fc39b95171988b776e6bb}{font\+\_\+ibm}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_gad8497ecbd9d845fc24a56688f157aad8}{font\+\_\+min}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_gab8c52bed73e745f1ee910f2da60ddb4c}{font\+\_\+ibm\+\_\+fixed}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Multiple font support for the Game\+Boy Michael Hope, 1999 \href{mailto:michaelh@earthling.net}{\texttt{ michaelh@earthling.\+net}}
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{font_8h_a63b93b85724b26151ddc2f0fc8050bd8}\label{font_8h_a63b93b85724b26151ddc2f0fc8050bd8}}
+\index{font.h@{font.h}!FONT\_256ENCODING@{FONT\_256ENCODING}}
+\index{FONT\_256ENCODING@{FONT\_256ENCODING}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{FONT\_256ENCODING}{FONT\_256ENCODING}}
+{\footnotesize\ttfamily \#define F\+O\+N\+T\+\_\+256\+E\+N\+C\+O\+D\+I\+NG~0}
+
+Various flags in the font header. \mbox{\Hypertarget{font_8h_a305ee4387ba051bd0e372b8a6dfb6905}\label{font_8h_a305ee4387ba051bd0e372b8a6dfb6905}}
+\index{font.h@{font.h}!FONT\_128ENCODING@{FONT\_128ENCODING}}
+\index{FONT\_128ENCODING@{FONT\_128ENCODING}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{FONT\_128ENCODING}{FONT\_128ENCODING}}
+{\footnotesize\ttfamily \#define F\+O\+N\+T\+\_\+128\+E\+N\+C\+O\+D\+I\+NG~1}
+
+\mbox{\Hypertarget{font_8h_a80d0f581e17313b62dd7824653462b55}\label{font_8h_a80d0f581e17313b62dd7824653462b55}}
+\index{font.h@{font.h}!FONT\_NOENCODING@{FONT\_NOENCODING}}
+\index{FONT\_NOENCODING@{FONT\_NOENCODING}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{FONT\_NOENCODING}{FONT\_NOENCODING}}
+{\footnotesize\ttfamily \#define F\+O\+N\+T\+\_\+\+N\+O\+E\+N\+C\+O\+D\+I\+NG~2}
+
+\mbox{\Hypertarget{font_8h_a7c5452979723b3535d17e253beb5d604}\label{font_8h_a7c5452979723b3535d17e253beb5d604}}
+\index{font.h@{font.h}!FONT\_COMPRESSED@{FONT\_COMPRESSED}}
+\index{FONT\_COMPRESSED@{FONT\_COMPRESSED}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{FONT\_COMPRESSED}{FONT\_COMPRESSED}}
+{\footnotesize\ttfamily \#define F\+O\+N\+T\+\_\+\+C\+O\+M\+P\+R\+E\+S\+S\+ED~4}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}\label{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}}
+\index{font.h@{font.h}!font\_t@{font\_t}}
+\index{font\_t@{font\_t}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{font\_t}{font\_t}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}}}
+
+font\+\_\+t is a handle to a font loaded by \mbox{\hyperlink{font_8h_ad089c09492dbd0423f4dd28f1a49a995}{font\+\_\+load()}}. It can be used with \mbox{\hyperlink{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}{font\+\_\+set()}} \mbox{\Hypertarget{font_8h_aea1f63fe2ea8c7689b061ad93b485553}\label{font_8h_aea1f63fe2ea8c7689b061ad93b485553}}
+\index{font.h@{font.h}!mfont\_handle@{mfont\_handle}}
+\index{mfont\_handle@{mfont\_handle}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{mfont\_handle}{mfont\_handle}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}} \mbox{\hyperlink{font_8h_aea1f63fe2ea8c7689b061ad93b485553}{mfont\+\_\+handle}}}
+
+Internal representation of a font. What a font\+\_\+t really is \mbox{\Hypertarget{font_8h_a82e0e078fc8a8b6a18538131625dba3a}\label{font_8h_a82e0e078fc8a8b6a18538131625dba3a}}
+\index{font.h@{font.h}!pmfont\_handle@{pmfont\_handle}}
+\index{pmfont\_handle@{pmfont\_handle}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{pmfont\_handle}{pmfont\_handle}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structsfont__handle}{sfont\+\_\+handle}}$\ast$ \mbox{\hyperlink{font_8h_a82e0e078fc8a8b6a18538131625dba3a}{pmfont\+\_\+handle}}}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{font_8h_a6b0459241994d549ae90776cdacede2d}\label{font_8h_a6b0459241994d549ae90776cdacede2d}}
+\index{font.h@{font.h}!font\_init@{font\_init}}
+\index{font\_init@{font\_init}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{font\_init()}{font\_init()}}
+{\footnotesize\ttfamily void font\+\_\+init (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Initializes the font system. Should be called before other font functions. \mbox{\Hypertarget{font_8h_ad089c09492dbd0423f4dd28f1a49a995}\label{font_8h_ad089c09492dbd0423f4dd28f1a49a995}}
+\index{font.h@{font.h}!font\_load@{font\_load}}
+\index{font\_load@{font\_load}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{font\_load()}{font\_load()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}} font\+\_\+load (\begin{DoxyParamCaption}\item[{void $\ast$}]{font }\end{DoxyParamCaption})}
+
+Load a font and set it as the current font.
+\begin{DoxyParams}{Parameters}
+{\em font} & Pointer to a font to load (usually a gbdk font)\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Handle to the loaded font, which can be used with \mbox{\hyperlink{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}{font\+\_\+set()}}
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{font_8h_a6b0459241994d549ae90776cdacede2d}{font\+\_\+init()}}, \mbox{\hyperlink{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}{font\+\_\+set()}}, \mbox{\hyperlink{group__gbdk__fonts}{List of gbdk fonts}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}\label{font_8h_a7dee0ba7beb261727340b8cce7c5afcd}}
+\index{font.h@{font.h}!font\_set@{font\_set}}
+\index{font\_set@{font\_set}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{font\_set()}{font\_set()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}} font\+\_\+set (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{font_8h_a7c6b54e58c41763c66f15ec4528a1d4a}{font\+\_\+t}}}]{font\+\_\+handle }\end{DoxyParamCaption})}
+
+Set the current font.
+\begin{DoxyParams}{Parameters}
+{\em font\+\_\+handle} & handle of a font returned by \mbox{\hyperlink{font_8h_ad089c09492dbd0423f4dd28f1a49a995}{font\+\_\+load()}}\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The previously used font handle.
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{font_8h_a6b0459241994d549ae90776cdacede2d}{font\+\_\+init()}}, \mbox{\hyperlink{font_8h_ad089c09492dbd0423f4dd28f1a49a995}{font\+\_\+load()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{font_8h_a47b4964ef677dce9fdf1e9df29804721}\label{font_8h_a47b4964ef677dce9fdf1e9df29804721}}
+\index{font.h@{font.h}!font\_color@{font\_color}}
+\index{font\_color@{font\_color}!font.h@{font.h}}
+\doxyparagraph{\texorpdfstring{font\_color()}{font\_color()}}
+{\footnotesize\ttfamily void font\+\_\+color (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{forecolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{backcolor }\end{DoxyParamCaption})}
+
+Set the current {\bfseries{foreground}} colour (for pixels), {\bfseries{background}} colour
\ No newline at end of file
diff --git a/docs/latex/gb_2gbdecompress_8h.tex b/docs/latex/gb_2gbdecompress_8h.tex
new file mode 100644
index 00000000..099408f4
--- /dev/null
+++ b/docs/latex/gb_2gbdecompress_8h.tex
@@ -0,0 +1,118 @@
+\hypertarget{gb_2gbdecompress_8h}{}\doxysubsection{gb/gbdecompress.h File Reference}
+\label{gb_2gbdecompress_8h}\index{gb/gbdecompress.h@{gb/gbdecompress.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}{gb\+\_\+decompress}} (const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$dest) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{gb_2gbdecompress_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+G\+B-\/\+Compress decompressor Compatible with the compression used in G\+B\+TD \begin{DoxySeeAlso}{See also}
+utility\+\_\+gbcompress \char`\"{}gbcompress\char`\"{}
+\end{DoxySeeAlso}
+G\+B-\/\+Compress decompressor Compatible with the compression used in G\+B\+TD
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}\label{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}}
+\index{gbdecompress.h@{gbdecompress.h}!gb\_decompress@{gb\_decompress}}
+\index{gb\_decompress@{gb\_decompress}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{gb\_decompress()}{gb\_decompress()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} gb\+\_\+decompress (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{dest }\end{DoxyParamCaption})}
+
+gb-\/decompress data from sour into dest
+
+
+\begin{DoxyParams}{Parameters}
+{\em sour} & Pointer to source gb-\/compressed data \\
+\hline
+{\em dest} & Pointer to destination buffer/address\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}\label{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}}
+\index{gbdecompress.h@{gbdecompress.h}!gb\_decompress\_bkg\_data@{gb\_decompress\_bkg\_data}}
+\index{gb\_decompress\_bkg\_data@{gb\_decompress\_bkg\_data}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{gb\_decompress\_bkg\_data()}{gb\_decompress\_bkg\_data()}}
+{\footnotesize\ttfamily void gb\+\_\+decompress\+\_\+bkg\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour }\end{DoxyParamCaption})}
+
+gb-\/decompress background tiles into V\+R\+AM
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em sour} & Pointer to (gb-\/compressed 2 bpp) source Tile Pattern data.\\
+\hline
+\end{DoxyParams}
+Note\+: This function avoids writes during modes 2 \& 3
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}\label{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}}
+\index{gbdecompress.h@{gbdecompress.h}!gb\_decompress\_win\_data@{gb\_decompress\_win\_data}}
+\index{gb\_decompress\_win\_data@{gb\_decompress\_win\_data}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{gb\_decompress\_win\_data()}{gb\_decompress\_win\_data()}}
+{\footnotesize\ttfamily void gb\+\_\+decompress\+\_\+win\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour }\end{DoxyParamCaption})}
+
+gb-\/decompress window tiles into V\+R\+AM
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em sour} & Pointer to (gb-\/compressed 2 bpp) source Tile Pattern data.\\
+\hline
+\end{DoxyParams}
+This is the same as \mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, since the Window Layer and Background Layer share the same Tile pattern data.
+
+Note\+: This function avoids writes during modes 2 \& 3
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}{gb\+\_\+decompress}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}\label{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}}
+\index{gbdecompress.h@{gbdecompress.h}!gb\_decompress\_sprite\_data@{gb\_decompress\_sprite\_data}}
+\index{gb\_decompress\_sprite\_data@{gb\_decompress\_sprite\_data}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{gb\_decompress\_sprite\_data()}{gb\_decompress\_sprite\_data()}}
+{\footnotesize\ttfamily void gb\+\_\+decompress\+\_\+sprite\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour }\end{DoxyParamCaption})}
+
+gb-\/decompress sprite tiles into V\+R\+AM
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em sour} & Pointer to source compressed data\\
+\hline
+\end{DoxyParams}
+Note\+: This function avoids writes during modes 2 \& 3
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2gbdecompress_8h_a3370eefd9a88fdefed71eeb92e6861f2}{gb\+\_\+decompress}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data}}
+\end{DoxySeeAlso}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{gb_2gbdecompress_8h_a0b3366755f3276b0243c1e0497471b7a}\label{gb_2gbdecompress_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{gbdecompress.h@{gbdecompress.h}!c@{c}}
+\index{c@{c}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
diff --git a/docs/latex/gb_2hardware_8h.tex b/docs/latex/gb_2hardware_8h.tex
new file mode 100644
index 00000000..1c202f73
--- /dev/null
+++ b/docs/latex/gb_2hardware_8h.tex
@@ -0,0 +1,2248 @@
+\hypertarget{gb_2hardware_8h}{}\doxysubsection{gb/hardware.h File Reference}
+\label{gb_2hardware_8h}\index{gb/hardware.h@{gb/hardware.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}}~extern \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}}~extern volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}}~extern volatile \mbox{\hyperlink{asm_2types_8h_afb3731986211fded0a874086c98ffcc4}{S\+FR}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae7eccdbd4f7b211074591866f515b760}{r\+P1}}~\mbox{\hyperlink{gb_2hardware_8h_a04f9a36ab04334fcd21d2f50c125d5d0}{P1\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}{P1\+F\+\_\+5}}~0b00100000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}{P1\+F\+\_\+4}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae8e325a01af1c20935a0c73ea6465a0e}{P1\+F\+\_\+3}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af59d0dd661ea73965101294d30111385}{P1\+F\+\_\+2}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aad20c4bf5115b40c9118a484808f4b92}{P1\+F\+\_\+1}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aedf8627c42ccf0aad5025ef629f4395a}{P1\+F\+\_\+0}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aeaabebe6a36d9e59a01dfceceb7b37d0}{P1\+F\+\_\+\+G\+E\+T\+\_\+\+D\+P\+AD}}~\mbox{\hyperlink{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}{P1\+F\+\_\+5}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a750bc82ab34a8929a5bba10f2336abe6}{P1\+F\+\_\+\+G\+E\+T\+\_\+\+B\+TN}}~\mbox{\hyperlink{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}{P1\+F\+\_\+4}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a5c97ffb0ee0a345ad31797da26410b5a}{P1\+F\+\_\+\+G\+E\+T\+\_\+\+N\+O\+NE}}~(\mbox{\hyperlink{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}{P1\+F\+\_\+4}} $\vert$ \mbox{\hyperlink{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}{P1\+F\+\_\+5}})
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af35c8012bca7a164f0910d55cdf6030f}{r\+SB}}~\mbox{\hyperlink{gb_2hardware_8h_a5f2da0d8200f44b6fd694c4a2bea820e}{S\+B\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7780d3a9b0fcc42499ed2451d7ab2ec5}{r\+SC}}~\mbox{\hyperlink{gb_2hardware_8h_a0fb715973ee3edd1b525eb7f503e3b2a}{S\+C\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a12ba1f984c585c57163f214f8829d569}{r\+D\+IV}}~\mbox{\hyperlink{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}{D\+I\+V\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a51594891b388d60d6917a6ff64542b66}{r\+T\+I\+MA}}~\mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a588d681dc33d9da3a899863b42980e18}{r\+T\+MA}}~\mbox{\hyperlink{gb_2hardware_8h_a39e5a5b9afd2c2ca78de4aba7ccd071c}{T\+M\+A\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aeddc90947f6a6a3a3fd1e1db3751c988}{r\+T\+AC}}~\mbox{\hyperlink{gb_2hardware_8h_a659173ac2c8da7fd04bc77973eb95256}{T\+A\+C\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a07863a535e0aaa11b73608d7430dbc0a}{T\+A\+C\+F\+\_\+\+S\+T\+A\+RT}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9179fd1ba4626627567b9478f691e653}{T\+A\+C\+F\+\_\+\+S\+T\+OP}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a19dce313b521aad75756abfc19bc9e78}{T\+A\+C\+F\+\_\+4\+K\+HZ}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7d2c165347d3bb3e3a54fad73e1f363e}{T\+A\+C\+F\+\_\+16\+K\+HZ}}~0b00000011
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a8be2b577af91deed7b8946b500e73319}{T\+A\+C\+F\+\_\+65\+K\+HZ}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac00b1e90d257b756845da578f4c3f3ba}{T\+A\+C\+F\+\_\+262\+K\+HZ}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a72a900117cdee0fbec10a278d9de0876}{S\+I\+O\+F\+\_\+\+C\+L\+O\+C\+K\+\_\+\+E\+XT}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a55ab8a9eb853e9bcfd72a2bf7e2c524b}{S\+I\+O\+F\+\_\+\+C\+L\+O\+C\+K\+\_\+\+I\+NT}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae9c948fad514ac440b7c6cc037384ec2}{S\+I\+O\+F\+\_\+\+S\+P\+E\+E\+D\+\_\+1X}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a44f550e55e7154388748e7c330929c63}{S\+I\+O\+F\+\_\+\+S\+P\+E\+E\+D\+\_\+32X}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a21a6e935e8a3ac591905429874ccbe84}{S\+I\+O\+F\+\_\+\+X\+F\+E\+R\+\_\+\+S\+T\+A\+RT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a19b35b0b21101a2782ce5bde4125db04}{S\+I\+O\+F\+\_\+\+B\+\_\+\+C\+L\+O\+CK}}~0
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a32b7b11b2ca90ffb52ce19e7279ea973}{S\+I\+O\+F\+\_\+\+B\+\_\+\+S\+P\+E\+ED}}~1
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a03aaffc30c9ff81d86502c1f6b3dbaea}{S\+I\+O\+F\+\_\+\+B\+\_\+\+X\+F\+E\+R\+\_\+\+S\+T\+A\+RT}}~7
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9534175911f7a54fa550318b275c4cc3}{r\+IF}}~\mbox{\hyperlink{gb_2hardware_8h_a509a5d0f138b40830cb447a862573be5}{I\+F\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4a73d9c15883b576fa0a5b4cc4ac2d08}{r\+A\+U\+D1\+S\+W\+E\+EP}}~\mbox{\hyperlink{gb_2hardware_8h_ad859dc62b1df1584ade0cbb822a3e46f}{N\+R10\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa8b5c841c97ae090724a910040f8dd2d}{A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+UP}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a281569182e3edb53b7c78b95a4082971}{A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+D\+O\+WN}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac4cbf03d9c2d64cddaf348e003780cf8}{A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+T\+I\+ME}}(x)~((x) $<$$<$ 4)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aaed4a07f441ddeecae520e76eb7b7e27}{A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+L\+E\+N\+G\+TH}}(x)~(x)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aaeb899eb6bd0593ffb4e90a2f762b18f}{r\+A\+U\+D1\+L\+EN}}~\mbox{\hyperlink{gb_2hardware_8h_ad53dc7f22b99fce195210a95f2749a72}{N\+R11\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae787a2c857fe8f3803ca353d5309fc85}{r\+A\+U\+D1\+E\+NV}}~\mbox{\hyperlink{gb_2hardware_8h_a7accf5feabd95a2d84c72f5915fff837}{N\+R12\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abb35a844f228403a96e28da7633344e1}{r\+A\+U\+D1\+L\+OW}}~\mbox{\hyperlink{gb_2hardware_8h_a3d30d4797321b403cd713d727fa3db6c}{N\+R13\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab042aa7a7fae75f94d8fb3e08004c797}{r\+A\+U\+D1\+H\+I\+GH}}~\mbox{\hyperlink{gb_2hardware_8h_a04c340d91842e8ee2b93922c2bcf39a4}{N\+R14\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a12f01b21d08249800571c6e0f26beeae}{r\+A\+U\+D2\+L\+EN}}~\mbox{\hyperlink{gb_2hardware_8h_a6dd3af1c8e3c66409aa0bc889d98e171}{N\+R21\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abf3efd42adced218237283156dbae055}{r\+A\+U\+D2\+E\+NV}}~\mbox{\hyperlink{gb_2hardware_8h_af1301c73bf93350045ba3a4887723ae8}{N\+R22\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a521466a7650d60b464991ebf68112114}{r\+A\+U\+D2\+L\+OW}}~\mbox{\hyperlink{gb_2hardware_8h_a7bb32ac86e3fbf5f869410ba42620616}{N\+R23\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_afc3684b8215221942a0cddc5960cf8a9}{r\+A\+U\+D2\+H\+I\+GH}}~\mbox{\hyperlink{gb_2hardware_8h_a6676e579a5e421adfb3d3e2d470d9ab6}{N\+R24\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a13e230a0d2979e0b9ca9582f6010162b}{r\+A\+U\+D3\+E\+NA}}~\mbox{\hyperlink{gb_2hardware_8h_a85d8e680d4d40a918b4195d2a4fada2a}{N\+R30\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae168529ead90f90c28f75d57ba4d28e2}{r\+A\+U\+D3\+L\+EN}}~\mbox{\hyperlink{gb_2hardware_8h_aea78f857e34370d7e1177a8bafe08148}{N\+R31\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a298bccebea918c63aed36c811e02333d}{r\+A\+U\+D3\+L\+E\+V\+EL}}~\mbox{\hyperlink{gb_2hardware_8h_a244ee6d8f6144be9b0f94602eddb6239}{N\+R32\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a31d1d4441749e90c2895fc8750b2234c}{r\+A\+U\+D3\+L\+OW}}~\mbox{\hyperlink{gb_2hardware_8h_a01c768b60853c8eecdefc2cedfc8d672}{N\+R33\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_acd0b3763f8599ed65e2d060b159bd91c}{r\+A\+U\+D3\+H\+I\+GH}}~\mbox{\hyperlink{gb_2hardware_8h_ab6da3e2cdbac1331bef3f6de9c808ab1}{N\+R34\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abd820b2f5c18efb43548f64862d38f05}{r\+A\+U\+D4\+L\+EN}}~\mbox{\hyperlink{gb_2hardware_8h_a557833cc1671aa0bd71f33766b4e0f24}{N\+R41\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abba6cc1819ea73d36a389fd99807dac5}{r\+A\+U\+D4\+E\+NV}}~\mbox{\hyperlink{gb_2hardware_8h_aba3d9fb63552bc02ec879696b581adac}{N\+R42\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae21217e822a66e77c15a4df4fa0cf1e9}{r\+A\+U\+D4\+P\+O\+LY}}~\mbox{\hyperlink{gb_2hardware_8h_a52593a64863d51fbf5860b0d31448972}{N\+R43\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a1bfe644bf343abd66c790c2758e7c0bb}{A\+U\+D4\+P\+O\+L\+Y\+\_\+\+W\+I\+D\+T\+H\+\_\+15\+B\+IT}}~0x00
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9120d2c7cd8800e302e76f525d332d6c}{A\+U\+D4\+P\+O\+L\+Y\+\_\+\+W\+I\+D\+T\+H\+\_\+7\+B\+IT}}~0x08
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a8492c6d9cb38fbb4a2bf9f5caa426578}{r\+A\+U\+D4\+GO}}~\mbox{\hyperlink{gb_2hardware_8h_a849d2cff8df2655f86b294466bec40d6}{N\+R44\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a534fa3f905e37ac434537af23847d89a}{r\+A\+U\+D\+V\+OL}}~\mbox{\hyperlink{gb_2hardware_8h_a924fdf48f6ad020423f6309055314928}{N\+R50\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a0dc3f482441d4e13828aebdf396c3be9}{A\+U\+D\+V\+O\+L\+\_\+\+V\+O\+L\+\_\+\+L\+E\+FT}}(x)~((x) $<$$<$ 4)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aabac77131d22297a246a3cfb0e443605}{A\+U\+D\+V\+O\+L\+\_\+\+V\+O\+L\+\_\+\+R\+I\+G\+HT}}(x)~((x))
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a8cb754b63b073abf30af3fd6f0052832}{A\+U\+D\+V\+O\+L\+\_\+\+V\+I\+N\+\_\+\+L\+E\+FT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa257f1e89f6782714cbc76ffc71d0fe7}{A\+U\+D\+V\+O\+L\+\_\+\+V\+I\+N\+\_\+\+R\+I\+G\+HT}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad2891216d025f44b02350f2ae2612b1e}{r\+A\+U\+D\+T\+E\+RM}}~\mbox{\hyperlink{gb_2hardware_8h_ab28f97eabd5f32d48ea27d97bd5dc64f}{N\+R51\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af9a0eee23057665604c258abc667939d}{A\+U\+D\+T\+E\+R\+M\+\_\+4\+\_\+\+L\+E\+FT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac1470febab4adcff88b31a465d480f72}{A\+U\+D\+T\+E\+R\+M\+\_\+3\+\_\+\+L\+E\+FT}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a309d26015522c2de1cff39ba6e6e6a04}{A\+U\+D\+T\+E\+R\+M\+\_\+2\+\_\+\+L\+E\+FT}}~0b00100000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aad3ccece4257429e82186f7b4d72b220}{A\+U\+D\+T\+E\+R\+M\+\_\+1\+\_\+\+L\+E\+FT}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2ba607e94d30ae8eeb1933c9dabbf68d}{A\+U\+D\+T\+E\+R\+M\+\_\+4\+\_\+\+R\+I\+G\+HT}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_adc74cebc6671c48bd502667f21d24da4}{A\+U\+D\+T\+E\+R\+M\+\_\+3\+\_\+\+R\+I\+G\+HT}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6fb64712b06118cad702691f2aa18cd4}{A\+U\+D\+T\+E\+R\+M\+\_\+2\+\_\+\+R\+I\+G\+HT}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa3cdccfb4b6b42cdee682bdb6e4fc310}{A\+U\+D\+T\+E\+R\+M\+\_\+1\+\_\+\+R\+I\+G\+HT}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a627044263543a1074dc9f4570aa8c915}{r\+A\+U\+D\+E\+NA}}~\mbox{\hyperlink{gb_2hardware_8h_ac429365dce851ca57d8fe4f7c54a1caa}{N\+R52\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7bbcf10e7a2b69127cd2f9e598bf601f}{A\+U\+D\+E\+N\+A\+\_\+\+ON}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a1b424d8f8a7438d19261401a843263d2}{A\+U\+D\+E\+N\+A\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}{r\+L\+C\+DC}}~\mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae9de9f58318f113afbc955986a502692}{L\+C\+D\+C\+F\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}{L\+C\+D\+C\+F\+\_\+\+ON}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a178a111ffe8eb38a2875fcaf3bfeba3f}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N9800}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9d555b0c19019150db73ca245ca62a78}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N9\+C00}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a582ece3b5f6cc49d47b2ad3e16d47374}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}~0b00100000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a69a43daf29c680b3ab0fbcad3118cd48}{L\+C\+D\+C\+F\+\_\+\+B\+G8800}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a731588b96fb8cdbeb7e68c089373e6f8}{L\+C\+D\+C\+F\+\_\+\+B\+G8000}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae4e03124190c7f96586b75cb4470a210}{L\+C\+D\+C\+F\+\_\+\+B\+G9800}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2e2a68c3274055a06cf38d00f007d4bf}{L\+C\+D\+C\+F\+\_\+\+B\+G9\+C00}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a1452fbc14f59076347c4cd4864fbeb51}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J8}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J16}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af14334f65debf6ee02cc21b58729cfde}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa8027f47983459c377169f57987b710c}{L\+C\+D\+C\+F\+\_\+\+B\+G\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}{L\+C\+D\+C\+F\+\_\+\+B\+G\+ON}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac112618942cb4719def91693616baaff}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+ON}}~7
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac826fdb70a043ebb8f1b317b00db6ff3}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+W\+I\+N9\+C00}}~6
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae1de721c95ddc8f29ba9b9deaee8d68c}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+W\+I\+N\+ON}}~5
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa336ca1c8bd29763222fc011a6272bdf}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G8000}}~4
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4889bb882e956665069212c4c8aa623b}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G9\+C00}}~3
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa8f5bcd5073aae5948a9647dcb76f779}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+O\+B\+J16}}~2
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6f6852d0f1d295b03e1230d5d97cb3e9}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+O\+B\+J\+ON}}~1
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa1f66868f63af2af6544e84122de3cc3}{L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G\+ON}}~0
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a338ec378453b4457efdb3008978c0f28}{r\+S\+T\+AT}}~\mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3b53105cc5be896b48794ba82d2aeb4c}{S\+T\+A\+T\+F\+\_\+\+L\+YC}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a47b5bc2ec6afaf1d50a8db5f24415922}{S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E10}}~0b00100000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad27f428fca89ea6b236ff3aa4769a05e}{S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E01}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a72b78d4d640033770be37d95bf8e1f9d}{S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E00}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2b3637bad69da368c3d7136632963fb7}{S\+T\+A\+T\+F\+\_\+\+L\+Y\+CF}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab04e468d2403bc69f761daa300bb999a}{S\+T\+A\+T\+F\+\_\+\+H\+BL}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_adb52e1f4b56ef259db300a187fe58fc9}{S\+T\+A\+T\+F\+\_\+\+V\+BL}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_acc45e1a4ea60d8248102a71c1658c5a3}{S\+T\+A\+T\+F\+\_\+\+O\+AM}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6f5df560b791d2fc086c23f99dd03354}{S\+T\+A\+T\+F\+\_\+\+L\+CD}}~0b00000011
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a92a063885caf6c6cda665da0309055ec}{S\+T\+A\+T\+F\+\_\+\+B\+U\+SY}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac1e4b66204a5bff207be36fdfedd63d5}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+L\+YC}}~6
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac75479aa0d34ac4344d80451276e97cc}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E10}}~5
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a5b683ff804221c6fc721b996fce65bda}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E01}}~4
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_acdbf6b3217f6a5681df94c8b8992d1d6}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E00}}~3
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab058c32e4ebf21b3beb06a0d7440e6ad}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+L\+Y\+CF}}~2
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a55c4815aea004a9951606db7e7a1f0d7}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+V\+BL}}~0
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7393f505e4277af40167d72415c46fa5}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+O\+AM}}~1
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3b0bf7449b517b3cda2a89428db6deb9}{S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+B\+U\+SY}}~1
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad2537c13699429afa59a68c6d6598632}{r\+S\+CY}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a97932e023d96ece4715802b6c2565c43}{r\+S\+CX}}~\mbox{\hyperlink{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}{S\+C\+X\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa851dae67d0bb80c17415774558d985f}{r\+LY}}~\mbox{\hyperlink{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}{L\+Y\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a92083741d31c9b2206b403e97124cbdc}{r\+L\+YC}}~\mbox{\hyperlink{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}{L\+Y\+C\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4225227c2812c3e3e500441f5e90772a}{r\+D\+MA}}~\mbox{\hyperlink{gb_2hardware_8h_ae13ce414d3fe7c98c1434918186dfc81}{D\+M\+A\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4fbcc4798c0721efcf4462c04a4566c1}{r\+B\+GP}}~\mbox{\hyperlink{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}{B\+G\+P\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae0a85bdedbbf1c79b5dbb5b23ca4bf79}{r\+O\+B\+P0}}~\mbox{\hyperlink{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}{O\+B\+P0\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2a14470dca10f69c092d817a433383bd}{r\+O\+B\+P1}}~\mbox{\hyperlink{gb_2hardware_8h_a9da545164e049ef773128f869daece13}{O\+B\+P1\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_afe84077234eb6e0520d7a6d0a9e903e7}{r\+WY}}~\mbox{\hyperlink{gb_2hardware_8h_a1c8d52607616ef37da335447e4cbe850}{W\+Y\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aba3cbaeca5ad045fb27095c210b661b7}{r\+WX}}~\mbox{\hyperlink{gb_2hardware_8h_a310aa43fbee2fd6b6b419df48acce1e0}{W\+X\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad3f67013699d0d38c203e4e863c91c41}{r\+K\+E\+Y1}}~\mbox{\hyperlink{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}{K\+E\+Y1\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a222d5e3cb366d5e720a832fc68ce3a13}{r\+S\+PD}}~\mbox{\hyperlink{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}{K\+E\+Y1\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a793b667a76985934545f73268000371a}{K\+E\+Y1\+F\+\_\+\+D\+B\+L\+S\+P\+E\+ED}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3205df57bc17c35df2924296341c6c69}{K\+E\+Y1\+F\+\_\+\+P\+R\+E\+P\+A\+RE}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a09fa1caa91313e57dc2c3dd354104b00}{r\+V\+BK}}~\mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a5011196496193d80fc58cdb632fbab24}{r\+H\+D\+M\+A1}}~\mbox{\hyperlink{gb_2hardware_8h_ab16e97796d675205a027b1b28b52956e}{H\+D\+M\+A1\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abc4249f04a9081f45439f61dabf861e5}{r\+H\+D\+M\+A2}}~\mbox{\hyperlink{gb_2hardware_8h_a801400d58ab7d862742e43b49fa68c8d}{H\+D\+M\+A2\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aca2df62463b4c3bc4a291e18f26f4ec5}{r\+H\+D\+M\+A3}}~\mbox{\hyperlink{gb_2hardware_8h_a57a94790cda8101a29c0d20086770f1b}{H\+D\+M\+A3\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_adee641ce3abf6b891e0e16bb56bdfcf7}{r\+H\+D\+M\+A4}}~\mbox{\hyperlink{gb_2hardware_8h_a3a2e883779980c1c37e780f47da4dd69}{H\+D\+M\+A4\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ae7eecc25286b951a78ef0dfc97aab3a7}{r\+H\+D\+M\+A5}}~\mbox{\hyperlink{gb_2hardware_8h_a1454ad6d5d04273eae1288af86deadac}{H\+D\+M\+A5\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2a1acb31d2869997315be64bff66d24b}{H\+D\+M\+A5\+F\+\_\+\+M\+O\+D\+E\+\_\+\+GP}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3c22f7324f09a14d666f9b21a9742789}{H\+D\+M\+A5\+F\+\_\+\+M\+O\+D\+E\+\_\+\+H\+BL}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a37c8ee0ef95132fd22cd426868510834}{H\+D\+M\+A5\+F\+\_\+\+B\+U\+SY}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a82c53e957d31d22c475e1629843bc12d}{r\+RP}}~\mbox{\hyperlink{gb_2hardware_8h_a76532f8742d9dd8cb26d2ccfd9c37bbf}{R\+P\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a092b2e33a050ac6ced4e897498ce9a2f}{R\+P\+F\+\_\+\+E\+N\+R\+E\+AD}}~0b11000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aaffaea3512173f90b85bae710d40ba6c}{R\+P\+F\+\_\+\+D\+A\+T\+A\+IN}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac47b78eb2ffea207a8c7ac643555ba6c}{R\+P\+F\+\_\+\+W\+R\+I\+T\+E\+\_\+\+HI}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab0fe74a7c155ae95cbf20bbb5e1bf46b}{R\+P\+F\+\_\+\+W\+R\+I\+T\+E\+\_\+\+LO}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4f1816144e0561ff4db1ad24f4ce847a}{r\+B\+C\+PS}}~\mbox{\hyperlink{gb_2hardware_8h_a28fa1ca08ef1c8ed97280bc5e60bdd99}{B\+C\+P\+S\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a88cceb86b8168f4c539e9612a81145a6}{B\+C\+P\+S\+F\+\_\+\+A\+U\+T\+O\+I\+NC}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3dbfd7c3f4a62774fbc98caa73899e96}{r\+B\+C\+PD}}~\mbox{\hyperlink{gb_2hardware_8h_a1fc8ff37ffe1c431364e1ef7c3961b30}{B\+C\+P\+D\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a056b789889ecf0691e54f721e015b873}{r\+O\+C\+PS}}~\mbox{\hyperlink{gb_2hardware_8h_a1686d2457eb4ad834bb75fb81c86aed8}{O\+C\+P\+S\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a0a6cc6543aa06c12b87e235c3d5da4ff}{O\+C\+P\+S\+F\+\_\+\+A\+U\+T\+O\+I\+NC}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a723eb3e0c2c681a050e9a325e35c25ae}{r\+O\+C\+PD}}~\mbox{\hyperlink{gb_2hardware_8h_ae24d0e88a1e1b8367ac1f5709d3e500c}{O\+C\+P\+D\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a83e14896ee3ddf2a4201b534d8e5f398}{r\+S\+V\+BK}}~\mbox{\hyperlink{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}{S\+V\+B\+K\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af93abe183851726958f27d979498032e}{r\+S\+M\+BK}}~\mbox{\hyperlink{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}{S\+V\+B\+K\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a28368838b9e270c301361a5f39c97154}{r\+P\+C\+M12}}~\mbox{\hyperlink{gb_2hardware_8h_a428894ca3fd0bb4527b03bed551ff04c}{P\+C\+M12\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ac1c402357ccc5f6c3c451450b30ca959}{r\+P\+C\+M34}}~\mbox{\hyperlink{gb_2hardware_8h_ac6d19ac313a99f41bd996e1ca5e43df0}{P\+C\+M34\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a52e850e75483f64ca070a33ee4877d47}{r\+IE}}~\mbox{\hyperlink{gb_2hardware_8h_aaef0dc6aab2f821ab406fdbc643af48e}{I\+E\+\_\+\+R\+EG}}
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa7ce989df75547f190d33cc85dce0187}{I\+E\+F\+\_\+\+H\+I\+LO}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a921bdc6c640b74c8c41e65f27882c68a}{I\+E\+F\+\_\+\+S\+E\+R\+I\+AL}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7c06fa33152a235baf273f1828dfa0a4}{I\+E\+F\+\_\+\+T\+I\+M\+ER}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a2eec77ca1b8730b410a7075c5a9c189e}{I\+E\+F\+\_\+\+S\+T\+AT}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3b8d7fece663511d5778136a5ca0070b}{I\+E\+F\+\_\+\+V\+B\+L\+A\+NK}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a8a88b504914eed6c0c4d2853689487ba}{A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+12\+\_\+5}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a52e58c151c5910792e75f7eea7f7ddbb}{A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+25}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_abd862604a105aa2475223b06abfa8bfe}{A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+50}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a194e3432f1e4d5d23d4ea096cef783e5}{A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+75}}~0b11000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a367f10d1cfcc04fdbfcb88f09b230bd3}{A\+U\+D\+L\+E\+N\+\_\+\+L\+E\+N\+G\+TH}}(x)~(x)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7dab7d2ad1bf670875814d3029d54122}{A\+U\+D\+E\+N\+V\+\_\+\+V\+OL}}(x)~((x) $<$$<$ 4)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9f069f19e8a05d1f1114aaabf531739e}{A\+U\+D\+E\+N\+V\+\_\+\+UP}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aa58f52563d21d56e79d422c544eeb13f}{A\+U\+D\+E\+N\+V\+\_\+\+D\+O\+WN}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad07fa5e19e334eee03c2fcb8671b2ed3}{A\+U\+D\+E\+N\+V\+\_\+\+L\+E\+N\+G\+TH}}(x)~(x)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a6d820a86bd30b531d5df5b27139ae92d}{A\+U\+D\+H\+I\+G\+H\+\_\+\+R\+E\+S\+T\+A\+RT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ab3325578cf7f7f67610353a62aba274e}{A\+U\+D\+H\+I\+G\+H\+\_\+\+L\+E\+N\+G\+T\+H\+\_\+\+ON}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_afe4927e6bc7efa57461e3c3b84d242da}{A\+U\+D\+H\+I\+G\+H\+\_\+\+L\+E\+N\+G\+T\+H\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a393866ca405b1023eec0e784bb88b026}{O\+A\+M\+F\+\_\+\+P\+RI}}~0b10000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a820677d593625e8716c3b78f36feb805}{O\+A\+M\+F\+\_\+\+Y\+F\+L\+IP}}~0b01000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a3cd1c1a1291d43dd43b181ff07f8b0a7}{O\+A\+M\+F\+\_\+\+X\+F\+L\+IP}}~0b00100000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a22b6b835de9ee737be73c4d252aac87c}{O\+A\+M\+F\+\_\+\+P\+A\+L0}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad92f3b2a1cc16700a4660c5821bcb15d}{O\+A\+M\+F\+\_\+\+P\+A\+L1}}~0b00010000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_aade9a193ade9ff22ed6f6263d1a3549b}{O\+A\+M\+F\+\_\+\+B\+A\+N\+K0}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad195d4be68ff54c3926c431fa5511de5}{O\+A\+M\+F\+\_\+\+B\+A\+N\+K1}}~0b00001000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4ff8c8a7acb74ba54043596110091605}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L0}}~0b00000000
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a9dff52d03755812d3a5ee7ca971c2e83}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L1}}~0b00000001
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a74744fb475532fa5d343e0818dcc6f88}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L2}}~0b00000010
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a704ab20694793ea87aace8bfc29568bc}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L3}}~0b00000011
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a13d5cddfb4a05fa49fc794aeea675c7b}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L4}}~0b00000100
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af9284c71b8ebf10ef8b9e12268f2cce3}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L5}}~0b00000101
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad6f5b0d9ae958dee3d6dfa8f4273ff5a}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L6}}~0b00000110
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af4b27e8f3c3e14a4f91051fea4c64e4b}{O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L7}}~0b00000111
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a5dc4d1ee47fe269761fe8fc46d56dabb}{O\+A\+M\+F\+\_\+\+P\+A\+L\+M\+A\+SK}}~0b00000111
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a519e327cac96f68a8ca9b77e0343672f}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+X\+\_\+\+O\+F\+F\+S\+ET}}~0
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af334c0e7dd6e434b3dbebd45bcdeb75a}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+Y\+\_\+\+O\+F\+F\+S\+ET}}~0
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}}~20
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}}~18
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a491dc081eae8c81e7ca88075ab806291}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+W\+I\+D\+TH}}~32
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a81fb56b6778772f829dab4c534e7749e}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+H\+E\+I\+G\+HT}}~32
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a4d682ed7a6158c5ba10afec739b17a8a}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+M\+A\+P\+\_\+\+E\+N\+T\+R\+Y\+\_\+\+S\+I\+ZE}}~1
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_af531e7ac0c0a58517fa3061631745c31}{D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+X}}~8
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7f6c8420831388300bbec13ea4cb57a0}{D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+Y}}~16
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}~(\mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}} $\ast$ 8)
+\item
+\#define \mbox{\hyperlink{gb_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}~(\mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}} $\ast$ 8)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_aea9200b29be90b58417787720cdf750b}{\+\_\+\+V\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_a73c94166161c33c61d63b3e4b5209cd0}{\+\_\+\+V\+R\+A\+M8000}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_af763563b6123ef29d73931f616969049}{\+\_\+\+V\+R\+A\+M8800}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_a668fd555c203361f5e4b835f05243102}{\+\_\+\+V\+R\+A\+M9000}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_ac5b9d1761bb972948fe10637dfaa94a7}{\+\_\+\+S\+C\+R\+N0}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_afff31f511127bf7ba1bd3b6bc740aee8}{\+\_\+\+S\+C\+R\+N1}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_a09a4ae65605182c8b694197d3aea695e}{\+\_\+\+S\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_ac1cf31cae6046360271ead6e8b7a6e87}{\+\_\+\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_a2f83a5f5daa6418c77756e32923aef5a}{\+\_\+\+R\+A\+M\+B\+A\+NK}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \mbox{\hyperlink{gb_2hardware_8h_a7030908728e166877fba9065671deb02}{\+\_\+\+O\+A\+M\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a134e3f274c1e607b8c5ff5724860e288}{\+\_\+\+IO}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a70db64bdd045a9df09b289fe9b28af22}{\+\_\+\+A\+U\+D3\+W\+A\+V\+E\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a472e3b0909a2f0878f643e9968b871ef}{\+\_\+\+H\+R\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a64dd59016e4f0e78672962fbc553a4b4}{r\+R\+A\+MG}}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ae0976a29e341edc6ceb810e6eb0328f1}{r\+R\+O\+M\+B0}}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a014f3a9d7ce8f8026c9ac6c0410bb099}{r\+R\+O\+M\+B1}}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ac2985dbccb16c4c00381d6fbe9600aff}{r\+R\+A\+MB}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a04f9a36ab04334fcd21d2f50c125d5d0}{P1\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a5f2da0d8200f44b6fd694c4a2bea820e}{S\+B\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a0fb715973ee3edd1b525eb7f503e3b2a}{S\+C\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}{D\+I\+V\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a39e5a5b9afd2c2ca78de4aba7ccd071c}{T\+M\+A\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a659173ac2c8da7fd04bc77973eb95256}{T\+A\+C\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a509a5d0f138b40830cb447a862573be5}{I\+F\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ad859dc62b1df1584ade0cbb822a3e46f}{N\+R10\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ad53dc7f22b99fce195210a95f2749a72}{N\+R11\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a7accf5feabd95a2d84c72f5915fff837}{N\+R12\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a3d30d4797321b403cd713d727fa3db6c}{N\+R13\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a04c340d91842e8ee2b93922c2bcf39a4}{N\+R14\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a6dd3af1c8e3c66409aa0bc889d98e171}{N\+R21\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_af1301c73bf93350045ba3a4887723ae8}{N\+R22\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a7bb32ac86e3fbf5f869410ba42620616}{N\+R23\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a6676e579a5e421adfb3d3e2d470d9ab6}{N\+R24\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a85d8e680d4d40a918b4195d2a4fada2a}{N\+R30\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_aea78f857e34370d7e1177a8bafe08148}{N\+R31\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a244ee6d8f6144be9b0f94602eddb6239}{N\+R32\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a01c768b60853c8eecdefc2cedfc8d672}{N\+R33\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ab6da3e2cdbac1331bef3f6de9c808ab1}{N\+R34\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a557833cc1671aa0bd71f33766b4e0f24}{N\+R41\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_aba3d9fb63552bc02ec879696b581adac}{N\+R42\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a52593a64863d51fbf5860b0d31448972}{N\+R43\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a849d2cff8df2655f86b294466bec40d6}{N\+R44\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a924fdf48f6ad020423f6309055314928}{N\+R50\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ab28f97eabd5f32d48ea27d97bd5dc64f}{N\+R51\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ac429365dce851ca57d8fe4f7c54a1caa}{N\+R52\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a2fe41a6e0abb211cc00a8fca90543966}{A\+U\+D3\+W\+A\+VE}} \mbox{[}16\mbox{]}
+\item
+\mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a271367a0bf840e5422b3a7ed541776f8}{P\+C\+M\+\_\+\+S\+A\+M\+P\+LE}} \mbox{[}16\mbox{]}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a244b162cf13bbcb4fe842d7e298b39c2}{S\+C\+Y\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}{S\+C\+X\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}{L\+Y\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}{L\+Y\+C\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ae13ce414d3fe7c98c1434918186dfc81}{D\+M\+A\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}{B\+G\+P\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}{O\+B\+P0\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a9da545164e049ef773128f869daece13}{O\+B\+P1\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a1c8d52607616ef37da335447e4cbe850}{W\+Y\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a310aa43fbee2fd6b6b419df48acce1e0}{W\+X\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}{K\+E\+Y1\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ab16e97796d675205a027b1b28b52956e}{H\+D\+M\+A1\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a801400d58ab7d862742e43b49fa68c8d}{H\+D\+M\+A2\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a57a94790cda8101a29c0d20086770f1b}{H\+D\+M\+A3\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a3a2e883779980c1c37e780f47da4dd69}{H\+D\+M\+A4\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a1454ad6d5d04273eae1288af86deadac}{H\+D\+M\+A5\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a76532f8742d9dd8cb26d2ccfd9c37bbf}{R\+P\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a28fa1ca08ef1c8ed97280bc5e60bdd99}{B\+C\+P\+S\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a1fc8ff37ffe1c431364e1ef7c3961b30}{B\+C\+P\+D\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a1686d2457eb4ad834bb75fb81c86aed8}{O\+C\+P\+S\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ae24d0e88a1e1b8367ac1f5709d3e500c}{O\+C\+P\+D\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}{S\+V\+B\+K\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_a428894ca3fd0bb4527b03bed551ff04c}{P\+C\+M12\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_ac6d19ac313a99f41bd996e1ca5e43df0}{P\+C\+M34\+\_\+\+R\+EG}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_2hardware_8h_aaef0dc6aab2f821ab406fdbc643af48e}{I\+E\+\_\+\+R\+EG}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Defines that let the GB\textquotesingle{}s hardware registers be accessed from C.
+
+See the \mbox{\hyperlink{docs_links_and_tools_Pandocs}{Pandocs}} for more details on each register.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{gb_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}\label{gb_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}}
+\index{hardware.h@{hardware.h}!\_\_BYTES@{\_\_BYTES}}
+\index{\_\_BYTES@{\_\_BYTES}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_\_BYTES}{\_\_BYTES}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+B\+Y\+T\+ES~extern \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}\label{gb_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}}
+\index{hardware.h@{hardware.h}!\_\_BYTE\_REG@{\_\_BYTE\_REG}}
+\index{\_\_BYTE\_REG@{\_\_BYTE\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_\_BYTE\_REG}{\_\_BYTE\_REG}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG~extern volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}\label{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}}
+\index{hardware.h@{hardware.h}!\_\_REG@{\_\_REG}}
+\index{\_\_REG@{\_\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_\_REG}{\_\_REG}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+R\+EG~extern volatile \mbox{\hyperlink{asm_2types_8h_afb3731986211fded0a874086c98ffcc4}{S\+FR}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae7eccdbd4f7b211074591866f515b760}\label{gb_2hardware_8h_ae7eccdbd4f7b211074591866f515b760}}
+\index{hardware.h@{hardware.h}!rP1@{rP1}}
+\index{rP1@{rP1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rP1}{rP1}}
+{\footnotesize\ttfamily \#define r\+P1~\mbox{\hyperlink{gb_2hardware_8h_a04f9a36ab04334fcd21d2f50c125d5d0}{P1\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}\label{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}}
+\index{hardware.h@{hardware.h}!P1F\_5@{P1F\_5}}
+\index{P1F\_5@{P1F\_5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_5}{P1F\_5}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+5~0b00100000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}\label{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}}
+\index{hardware.h@{hardware.h}!P1F\_4@{P1F\_4}}
+\index{P1F\_4@{P1F\_4}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_4}{P1F\_4}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+4~0b00010000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae8e325a01af1c20935a0c73ea6465a0e}\label{gb_2hardware_8h_ae8e325a01af1c20935a0c73ea6465a0e}}
+\index{hardware.h@{hardware.h}!P1F\_3@{P1F\_3}}
+\index{P1F\_3@{P1F\_3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_3}{P1F\_3}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+3~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_af59d0dd661ea73965101294d30111385}\label{gb_2hardware_8h_af59d0dd661ea73965101294d30111385}}
+\index{hardware.h@{hardware.h}!P1F\_2@{P1F\_2}}
+\index{P1F\_2@{P1F\_2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_2}{P1F\_2}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+2~0b00000100}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aad20c4bf5115b40c9118a484808f4b92}\label{gb_2hardware_8h_aad20c4bf5115b40c9118a484808f4b92}}
+\index{hardware.h@{hardware.h}!P1F\_1@{P1F\_1}}
+\index{P1F\_1@{P1F\_1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_1}{P1F\_1}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+1~0b00000010}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aedf8627c42ccf0aad5025ef629f4395a}\label{gb_2hardware_8h_aedf8627c42ccf0aad5025ef629f4395a}}
+\index{hardware.h@{hardware.h}!P1F\_0@{P1F\_0}}
+\index{P1F\_0@{P1F\_0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_0}{P1F\_0}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+0~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aeaabebe6a36d9e59a01dfceceb7b37d0}\label{gb_2hardware_8h_aeaabebe6a36d9e59a01dfceceb7b37d0}}
+\index{hardware.h@{hardware.h}!P1F\_GET\_DPAD@{P1F\_GET\_DPAD}}
+\index{P1F\_GET\_DPAD@{P1F\_GET\_DPAD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_GET\_DPAD}{P1F\_GET\_DPAD}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+\+G\+E\+T\+\_\+\+D\+P\+AD~\mbox{\hyperlink{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}{P1\+F\+\_\+5}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a750bc82ab34a8929a5bba10f2336abe6}\label{gb_2hardware_8h_a750bc82ab34a8929a5bba10f2336abe6}}
+\index{hardware.h@{hardware.h}!P1F\_GET\_BTN@{P1F\_GET\_BTN}}
+\index{P1F\_GET\_BTN@{P1F\_GET\_BTN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_GET\_BTN}{P1F\_GET\_BTN}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+\+G\+E\+T\+\_\+\+B\+TN~\mbox{\hyperlink{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}{P1\+F\+\_\+4}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a5c97ffb0ee0a345ad31797da26410b5a}\label{gb_2hardware_8h_a5c97ffb0ee0a345ad31797da26410b5a}}
+\index{hardware.h@{hardware.h}!P1F\_GET\_NONE@{P1F\_GET\_NONE}}
+\index{P1F\_GET\_NONE@{P1F\_GET\_NONE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1F\_GET\_NONE}{P1F\_GET\_NONE}}
+{\footnotesize\ttfamily \#define P1\+F\+\_\+\+G\+E\+T\+\_\+\+N\+O\+NE~(\mbox{\hyperlink{gb_2hardware_8h_ad215dbfc83c9486ead2f28510366f40b}{P1\+F\+\_\+4}} $\vert$ \mbox{\hyperlink{gb_2hardware_8h_a6963ef598339e1163d30e57a962e5278}{P1\+F\+\_\+5}})}
+
+\mbox{\Hypertarget{gb_2hardware_8h_af35c8012bca7a164f0910d55cdf6030f}\label{gb_2hardware_8h_af35c8012bca7a164f0910d55cdf6030f}}
+\index{hardware.h@{hardware.h}!rSB@{rSB}}
+\index{rSB@{rSB}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSB}{rSB}}
+{\footnotesize\ttfamily \#define r\+SB~\mbox{\hyperlink{gb_2hardware_8h_a5f2da0d8200f44b6fd694c4a2bea820e}{S\+B\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7780d3a9b0fcc42499ed2451d7ab2ec5}\label{gb_2hardware_8h_a7780d3a9b0fcc42499ed2451d7ab2ec5}}
+\index{hardware.h@{hardware.h}!rSC@{rSC}}
+\index{rSC@{rSC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSC}{rSC}}
+{\footnotesize\ttfamily \#define r\+SC~\mbox{\hyperlink{gb_2hardware_8h_a0fb715973ee3edd1b525eb7f503e3b2a}{S\+C\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a12ba1f984c585c57163f214f8829d569}\label{gb_2hardware_8h_a12ba1f984c585c57163f214f8829d569}}
+\index{hardware.h@{hardware.h}!rDIV@{rDIV}}
+\index{rDIV@{rDIV}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rDIV}{rDIV}}
+{\footnotesize\ttfamily \#define r\+D\+IV~\mbox{\hyperlink{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}{D\+I\+V\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a51594891b388d60d6917a6ff64542b66}\label{gb_2hardware_8h_a51594891b388d60d6917a6ff64542b66}}
+\index{hardware.h@{hardware.h}!rTIMA@{rTIMA}}
+\index{rTIMA@{rTIMA}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rTIMA}{rTIMA}}
+{\footnotesize\ttfamily \#define r\+T\+I\+MA~\mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a588d681dc33d9da3a899863b42980e18}\label{gb_2hardware_8h_a588d681dc33d9da3a899863b42980e18}}
+\index{hardware.h@{hardware.h}!rTMA@{rTMA}}
+\index{rTMA@{rTMA}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rTMA}{rTMA}}
+{\footnotesize\ttfamily \#define r\+T\+MA~\mbox{\hyperlink{gb_2hardware_8h_a39e5a5b9afd2c2ca78de4aba7ccd071c}{T\+M\+A\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aeddc90947f6a6a3a3fd1e1db3751c988}\label{gb_2hardware_8h_aeddc90947f6a6a3a3fd1e1db3751c988}}
+\index{hardware.h@{hardware.h}!rTAC@{rTAC}}
+\index{rTAC@{rTAC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rTAC}{rTAC}}
+{\footnotesize\ttfamily \#define r\+T\+AC~\mbox{\hyperlink{gb_2hardware_8h_a659173ac2c8da7fd04bc77973eb95256}{T\+A\+C\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a07863a535e0aaa11b73608d7430dbc0a}\label{gb_2hardware_8h_a07863a535e0aaa11b73608d7430dbc0a}}
+\index{hardware.h@{hardware.h}!TACF\_START@{TACF\_START}}
+\index{TACF\_START@{TACF\_START}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_START}{TACF\_START}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+\+S\+T\+A\+RT~0b00000100}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a9179fd1ba4626627567b9478f691e653}\label{gb_2hardware_8h_a9179fd1ba4626627567b9478f691e653}}
+\index{hardware.h@{hardware.h}!TACF\_STOP@{TACF\_STOP}}
+\index{TACF\_STOP@{TACF\_STOP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_STOP}{TACF\_STOP}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+\+S\+T\+OP~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a19dce313b521aad75756abfc19bc9e78}\label{gb_2hardware_8h_a19dce313b521aad75756abfc19bc9e78}}
+\index{hardware.h@{hardware.h}!TACF\_4KHZ@{TACF\_4KHZ}}
+\index{TACF\_4KHZ@{TACF\_4KHZ}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_4KHZ}{TACF\_4KHZ}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+4\+K\+HZ~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7d2c165347d3bb3e3a54fad73e1f363e}\label{gb_2hardware_8h_a7d2c165347d3bb3e3a54fad73e1f363e}}
+\index{hardware.h@{hardware.h}!TACF\_16KHZ@{TACF\_16KHZ}}
+\index{TACF\_16KHZ@{TACF\_16KHZ}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_16KHZ}{TACF\_16KHZ}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+16\+K\+HZ~0b00000011}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a8be2b577af91deed7b8946b500e73319}\label{gb_2hardware_8h_a8be2b577af91deed7b8946b500e73319}}
+\index{hardware.h@{hardware.h}!TACF\_65KHZ@{TACF\_65KHZ}}
+\index{TACF\_65KHZ@{TACF\_65KHZ}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_65KHZ}{TACF\_65KHZ}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+65\+K\+HZ~0b00000010}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac00b1e90d257b756845da578f4c3f3ba}\label{gb_2hardware_8h_ac00b1e90d257b756845da578f4c3f3ba}}
+\index{hardware.h@{hardware.h}!TACF\_262KHZ@{TACF\_262KHZ}}
+\index{TACF\_262KHZ@{TACF\_262KHZ}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TACF\_262KHZ}{TACF\_262KHZ}}
+{\footnotesize\ttfamily \#define T\+A\+C\+F\+\_\+262\+K\+HZ~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a72a900117cdee0fbec10a278d9de0876}\label{gb_2hardware_8h_a72a900117cdee0fbec10a278d9de0876}}
+\index{hardware.h@{hardware.h}!SIOF\_CLOCK\_EXT@{SIOF\_CLOCK\_EXT}}
+\index{SIOF\_CLOCK\_EXT@{SIOF\_CLOCK\_EXT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_CLOCK\_EXT}{SIOF\_CLOCK\_EXT}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+C\+L\+O\+C\+K\+\_\+\+E\+XT~0b00000000}
+
+Serial IO\+: Use External clock \mbox{\Hypertarget{gb_2hardware_8h_a55ab8a9eb853e9bcfd72a2bf7e2c524b}\label{gb_2hardware_8h_a55ab8a9eb853e9bcfd72a2bf7e2c524b}}
+\index{hardware.h@{hardware.h}!SIOF\_CLOCK\_INT@{SIOF\_CLOCK\_INT}}
+\index{SIOF\_CLOCK\_INT@{SIOF\_CLOCK\_INT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_CLOCK\_INT}{SIOF\_CLOCK\_INT}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+C\+L\+O\+C\+K\+\_\+\+I\+NT~0b00000001}
+
+Serial IO\+: Use Internal clock \mbox{\Hypertarget{gb_2hardware_8h_ae9c948fad514ac440b7c6cc037384ec2}\label{gb_2hardware_8h_ae9c948fad514ac440b7c6cc037384ec2}}
+\index{hardware.h@{hardware.h}!SIOF\_SPEED\_1X@{SIOF\_SPEED\_1X}}
+\index{SIOF\_SPEED\_1X@{SIOF\_SPEED\_1X}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_SPEED\_1X}{SIOF\_SPEED\_1X}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+S\+P\+E\+E\+D\+\_\+1X~0b00000000}
+
+Serial IO\+: If internal clock then 8K\+Hz mode, 1K\+B/s (16Khz in C\+GB high-\/speed mode, 2K\+B/s) \mbox{\Hypertarget{gb_2hardware_8h_a44f550e55e7154388748e7c330929c63}\label{gb_2hardware_8h_a44f550e55e7154388748e7c330929c63}}
+\index{hardware.h@{hardware.h}!SIOF\_SPEED\_32X@{SIOF\_SPEED\_32X}}
+\index{SIOF\_SPEED\_32X@{SIOF\_SPEED\_32X}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_SPEED\_32X}{SIOF\_SPEED\_32X}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+S\+P\+E\+E\+D\+\_\+32X~0b00000010}
+
+Serial IO\+: {\bfseries{C\+G\+B-\/\+Mode O\+N\+LY}} If internal clock then 256K\+Hz mode, 32K\+B/s (512K\+Hz in C\+GB high-\/speed mode, 64K\+B/s) \mbox{\Hypertarget{gb_2hardware_8h_a21a6e935e8a3ac591905429874ccbe84}\label{gb_2hardware_8h_a21a6e935e8a3ac591905429874ccbe84}}
+\index{hardware.h@{hardware.h}!SIOF\_XFER\_START@{SIOF\_XFER\_START}}
+\index{SIOF\_XFER\_START@{SIOF\_XFER\_START}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_XFER\_START}{SIOF\_XFER\_START}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+X\+F\+E\+R\+\_\+\+S\+T\+A\+RT~0b10000000}
+
+Serial IO\+: Start Transfer. Automatically cleared at the end of transfer \mbox{\Hypertarget{gb_2hardware_8h_a19b35b0b21101a2782ce5bde4125db04}\label{gb_2hardware_8h_a19b35b0b21101a2782ce5bde4125db04}}
+\index{hardware.h@{hardware.h}!SIOF\_B\_CLOCK@{SIOF\_B\_CLOCK}}
+\index{SIOF\_B\_CLOCK@{SIOF\_B\_CLOCK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_B\_CLOCK}{SIOF\_B\_CLOCK}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+B\+\_\+\+C\+L\+O\+CK~0}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a32b7b11b2ca90ffb52ce19e7279ea973}\label{gb_2hardware_8h_a32b7b11b2ca90ffb52ce19e7279ea973}}
+\index{hardware.h@{hardware.h}!SIOF\_B\_SPEED@{SIOF\_B\_SPEED}}
+\index{SIOF\_B\_SPEED@{SIOF\_B\_SPEED}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_B\_SPEED}{SIOF\_B\_SPEED}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+B\+\_\+\+S\+P\+E\+ED~1}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a03aaffc30c9ff81d86502c1f6b3dbaea}\label{gb_2hardware_8h_a03aaffc30c9ff81d86502c1f6b3dbaea}}
+\index{hardware.h@{hardware.h}!SIOF\_B\_XFER\_START@{SIOF\_B\_XFER\_START}}
+\index{SIOF\_B\_XFER\_START@{SIOF\_B\_XFER\_START}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SIOF\_B\_XFER\_START}{SIOF\_B\_XFER\_START}}
+{\footnotesize\ttfamily \#define S\+I\+O\+F\+\_\+\+B\+\_\+\+X\+F\+E\+R\+\_\+\+S\+T\+A\+RT~7}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a9534175911f7a54fa550318b275c4cc3}\label{gb_2hardware_8h_a9534175911f7a54fa550318b275c4cc3}}
+\index{hardware.h@{hardware.h}!rIF@{rIF}}
+\index{rIF@{rIF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rIF}{rIF}}
+{\footnotesize\ttfamily \#define r\+IF~\mbox{\hyperlink{gb_2hardware_8h_a509a5d0f138b40830cb447a862573be5}{I\+F\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a4a73d9c15883b576fa0a5b4cc4ac2d08}\label{gb_2hardware_8h_a4a73d9c15883b576fa0a5b4cc4ac2d08}}
+\index{hardware.h@{hardware.h}!rAUD1SWEEP@{rAUD1SWEEP}}
+\index{rAUD1SWEEP@{rAUD1SWEEP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD1SWEEP}{rAUD1SWEEP}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D1\+S\+W\+E\+EP~\mbox{\hyperlink{gb_2hardware_8h_ad859dc62b1df1584ade0cbb822a3e46f}{N\+R10\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa8b5c841c97ae090724a910040f8dd2d}\label{gb_2hardware_8h_aa8b5c841c97ae090724a910040f8dd2d}}
+\index{hardware.h@{hardware.h}!AUD1SWEEP\_UP@{AUD1SWEEP\_UP}}
+\index{AUD1SWEEP\_UP@{AUD1SWEEP\_UP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD1SWEEP\_UP}{AUD1SWEEP\_UP}}
+{\footnotesize\ttfamily \#define A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+UP~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a281569182e3edb53b7c78b95a4082971}\label{gb_2hardware_8h_a281569182e3edb53b7c78b95a4082971}}
+\index{hardware.h@{hardware.h}!AUD1SWEEP\_DOWN@{AUD1SWEEP\_DOWN}}
+\index{AUD1SWEEP\_DOWN@{AUD1SWEEP\_DOWN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD1SWEEP\_DOWN}{AUD1SWEEP\_DOWN}}
+{\footnotesize\ttfamily \#define A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+D\+O\+WN~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac4cbf03d9c2d64cddaf348e003780cf8}\label{gb_2hardware_8h_ac4cbf03d9c2d64cddaf348e003780cf8}}
+\index{hardware.h@{hardware.h}!AUD1SWEEP\_TIME@{AUD1SWEEP\_TIME}}
+\index{AUD1SWEEP\_TIME@{AUD1SWEEP\_TIME}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD1SWEEP\_TIME}{AUD1SWEEP\_TIME}}
+{\footnotesize\ttfamily \#define A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+T\+I\+ME(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~((x) $<$$<$ 4)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aaed4a07f441ddeecae520e76eb7b7e27}\label{gb_2hardware_8h_aaed4a07f441ddeecae520e76eb7b7e27}}
+\index{hardware.h@{hardware.h}!AUD1SWEEP\_LENGTH@{AUD1SWEEP\_LENGTH}}
+\index{AUD1SWEEP\_LENGTH@{AUD1SWEEP\_LENGTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD1SWEEP\_LENGTH}{AUD1SWEEP\_LENGTH}}
+{\footnotesize\ttfamily \#define A\+U\+D1\+S\+W\+E\+E\+P\+\_\+\+L\+E\+N\+G\+TH(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~(x)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aaeb899eb6bd0593ffb4e90a2f762b18f}\label{gb_2hardware_8h_aaeb899eb6bd0593ffb4e90a2f762b18f}}
+\index{hardware.h@{hardware.h}!rAUD1LEN@{rAUD1LEN}}
+\index{rAUD1LEN@{rAUD1LEN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD1LEN}{rAUD1LEN}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D1\+L\+EN~\mbox{\hyperlink{gb_2hardware_8h_ad53dc7f22b99fce195210a95f2749a72}{N\+R11\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae787a2c857fe8f3803ca353d5309fc85}\label{gb_2hardware_8h_ae787a2c857fe8f3803ca353d5309fc85}}
+\index{hardware.h@{hardware.h}!rAUD1ENV@{rAUD1ENV}}
+\index{rAUD1ENV@{rAUD1ENV}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD1ENV}{rAUD1ENV}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D1\+E\+NV~\mbox{\hyperlink{gb_2hardware_8h_a7accf5feabd95a2d84c72f5915fff837}{N\+R12\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abb35a844f228403a96e28da7633344e1}\label{gb_2hardware_8h_abb35a844f228403a96e28da7633344e1}}
+\index{hardware.h@{hardware.h}!rAUD1LOW@{rAUD1LOW}}
+\index{rAUD1LOW@{rAUD1LOW}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD1LOW}{rAUD1LOW}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D1\+L\+OW~\mbox{\hyperlink{gb_2hardware_8h_a3d30d4797321b403cd713d727fa3db6c}{N\+R13\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ab042aa7a7fae75f94d8fb3e08004c797}\label{gb_2hardware_8h_ab042aa7a7fae75f94d8fb3e08004c797}}
+\index{hardware.h@{hardware.h}!rAUD1HIGH@{rAUD1HIGH}}
+\index{rAUD1HIGH@{rAUD1HIGH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD1HIGH}{rAUD1HIGH}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D1\+H\+I\+GH~\mbox{\hyperlink{gb_2hardware_8h_a04c340d91842e8ee2b93922c2bcf39a4}{N\+R14\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a12f01b21d08249800571c6e0f26beeae}\label{gb_2hardware_8h_a12f01b21d08249800571c6e0f26beeae}}
+\index{hardware.h@{hardware.h}!rAUD2LEN@{rAUD2LEN}}
+\index{rAUD2LEN@{rAUD2LEN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD2LEN}{rAUD2LEN}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D2\+L\+EN~\mbox{\hyperlink{gb_2hardware_8h_a6dd3af1c8e3c66409aa0bc889d98e171}{N\+R21\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abf3efd42adced218237283156dbae055}\label{gb_2hardware_8h_abf3efd42adced218237283156dbae055}}
+\index{hardware.h@{hardware.h}!rAUD2ENV@{rAUD2ENV}}
+\index{rAUD2ENV@{rAUD2ENV}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD2ENV}{rAUD2ENV}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D2\+E\+NV~\mbox{\hyperlink{gb_2hardware_8h_af1301c73bf93350045ba3a4887723ae8}{N\+R22\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a521466a7650d60b464991ebf68112114}\label{gb_2hardware_8h_a521466a7650d60b464991ebf68112114}}
+\index{hardware.h@{hardware.h}!rAUD2LOW@{rAUD2LOW}}
+\index{rAUD2LOW@{rAUD2LOW}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD2LOW}{rAUD2LOW}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D2\+L\+OW~\mbox{\hyperlink{gb_2hardware_8h_a7bb32ac86e3fbf5f869410ba42620616}{N\+R23\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_afc3684b8215221942a0cddc5960cf8a9}\label{gb_2hardware_8h_afc3684b8215221942a0cddc5960cf8a9}}
+\index{hardware.h@{hardware.h}!rAUD2HIGH@{rAUD2HIGH}}
+\index{rAUD2HIGH@{rAUD2HIGH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD2HIGH}{rAUD2HIGH}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D2\+H\+I\+GH~\mbox{\hyperlink{gb_2hardware_8h_a6676e579a5e421adfb3d3e2d470d9ab6}{N\+R24\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a13e230a0d2979e0b9ca9582f6010162b}\label{gb_2hardware_8h_a13e230a0d2979e0b9ca9582f6010162b}}
+\index{hardware.h@{hardware.h}!rAUD3ENA@{rAUD3ENA}}
+\index{rAUD3ENA@{rAUD3ENA}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD3ENA}{rAUD3ENA}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D3\+E\+NA~\mbox{\hyperlink{gb_2hardware_8h_a85d8e680d4d40a918b4195d2a4fada2a}{N\+R30\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae168529ead90f90c28f75d57ba4d28e2}\label{gb_2hardware_8h_ae168529ead90f90c28f75d57ba4d28e2}}
+\index{hardware.h@{hardware.h}!rAUD3LEN@{rAUD3LEN}}
+\index{rAUD3LEN@{rAUD3LEN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD3LEN}{rAUD3LEN}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D3\+L\+EN~\mbox{\hyperlink{gb_2hardware_8h_aea78f857e34370d7e1177a8bafe08148}{N\+R31\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a298bccebea918c63aed36c811e02333d}\label{gb_2hardware_8h_a298bccebea918c63aed36c811e02333d}}
+\index{hardware.h@{hardware.h}!rAUD3LEVEL@{rAUD3LEVEL}}
+\index{rAUD3LEVEL@{rAUD3LEVEL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD3LEVEL}{rAUD3LEVEL}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D3\+L\+E\+V\+EL~\mbox{\hyperlink{gb_2hardware_8h_a244ee6d8f6144be9b0f94602eddb6239}{N\+R32\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a31d1d4441749e90c2895fc8750b2234c}\label{gb_2hardware_8h_a31d1d4441749e90c2895fc8750b2234c}}
+\index{hardware.h@{hardware.h}!rAUD3LOW@{rAUD3LOW}}
+\index{rAUD3LOW@{rAUD3LOW}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD3LOW}{rAUD3LOW}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D3\+L\+OW~\mbox{\hyperlink{gb_2hardware_8h_a01c768b60853c8eecdefc2cedfc8d672}{N\+R33\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_acd0b3763f8599ed65e2d060b159bd91c}\label{gb_2hardware_8h_acd0b3763f8599ed65e2d060b159bd91c}}
+\index{hardware.h@{hardware.h}!rAUD3HIGH@{rAUD3HIGH}}
+\index{rAUD3HIGH@{rAUD3HIGH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD3HIGH}{rAUD3HIGH}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D3\+H\+I\+GH~\mbox{\hyperlink{gb_2hardware_8h_ab6da3e2cdbac1331bef3f6de9c808ab1}{N\+R34\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abd820b2f5c18efb43548f64862d38f05}\label{gb_2hardware_8h_abd820b2f5c18efb43548f64862d38f05}}
+\index{hardware.h@{hardware.h}!rAUD4LEN@{rAUD4LEN}}
+\index{rAUD4LEN@{rAUD4LEN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD4LEN}{rAUD4LEN}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D4\+L\+EN~\mbox{\hyperlink{gb_2hardware_8h_a557833cc1671aa0bd71f33766b4e0f24}{N\+R41\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abba6cc1819ea73d36a389fd99807dac5}\label{gb_2hardware_8h_abba6cc1819ea73d36a389fd99807dac5}}
+\index{hardware.h@{hardware.h}!rAUD4ENV@{rAUD4ENV}}
+\index{rAUD4ENV@{rAUD4ENV}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD4ENV}{rAUD4ENV}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D4\+E\+NV~\mbox{\hyperlink{gb_2hardware_8h_aba3d9fb63552bc02ec879696b581adac}{N\+R42\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae21217e822a66e77c15a4df4fa0cf1e9}\label{gb_2hardware_8h_ae21217e822a66e77c15a4df4fa0cf1e9}}
+\index{hardware.h@{hardware.h}!rAUD4POLY@{rAUD4POLY}}
+\index{rAUD4POLY@{rAUD4POLY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD4POLY}{rAUD4POLY}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D4\+P\+O\+LY~\mbox{\hyperlink{gb_2hardware_8h_a52593a64863d51fbf5860b0d31448972}{N\+R43\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a1bfe644bf343abd66c790c2758e7c0bb}\label{gb_2hardware_8h_a1bfe644bf343abd66c790c2758e7c0bb}}
+\index{hardware.h@{hardware.h}!AUD4POLY\_WIDTH\_15BIT@{AUD4POLY\_WIDTH\_15BIT}}
+\index{AUD4POLY\_WIDTH\_15BIT@{AUD4POLY\_WIDTH\_15BIT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD4POLY\_WIDTH\_15BIT}{AUD4POLY\_WIDTH\_15BIT}}
+{\footnotesize\ttfamily \#define A\+U\+D4\+P\+O\+L\+Y\+\_\+\+W\+I\+D\+T\+H\+\_\+15\+B\+IT~0x00}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a9120d2c7cd8800e302e76f525d332d6c}\label{gb_2hardware_8h_a9120d2c7cd8800e302e76f525d332d6c}}
+\index{hardware.h@{hardware.h}!AUD4POLY\_WIDTH\_7BIT@{AUD4POLY\_WIDTH\_7BIT}}
+\index{AUD4POLY\_WIDTH\_7BIT@{AUD4POLY\_WIDTH\_7BIT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD4POLY\_WIDTH\_7BIT}{AUD4POLY\_WIDTH\_7BIT}}
+{\footnotesize\ttfamily \#define A\+U\+D4\+P\+O\+L\+Y\+\_\+\+W\+I\+D\+T\+H\+\_\+7\+B\+IT~0x08}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a8492c6d9cb38fbb4a2bf9f5caa426578}\label{gb_2hardware_8h_a8492c6d9cb38fbb4a2bf9f5caa426578}}
+\index{hardware.h@{hardware.h}!rAUD4GO@{rAUD4GO}}
+\index{rAUD4GO@{rAUD4GO}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUD4GO}{rAUD4GO}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D4\+GO~\mbox{\hyperlink{gb_2hardware_8h_a849d2cff8df2655f86b294466bec40d6}{N\+R44\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a534fa3f905e37ac434537af23847d89a}\label{gb_2hardware_8h_a534fa3f905e37ac434537af23847d89a}}
+\index{hardware.h@{hardware.h}!rAUDVOL@{rAUDVOL}}
+\index{rAUDVOL@{rAUDVOL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUDVOL}{rAUDVOL}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D\+V\+OL~\mbox{\hyperlink{gb_2hardware_8h_a924fdf48f6ad020423f6309055314928}{N\+R50\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a0dc3f482441d4e13828aebdf396c3be9}\label{gb_2hardware_8h_a0dc3f482441d4e13828aebdf396c3be9}}
+\index{hardware.h@{hardware.h}!AUDVOL\_VOL\_LEFT@{AUDVOL\_VOL\_LEFT}}
+\index{AUDVOL\_VOL\_LEFT@{AUDVOL\_VOL\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDVOL\_VOL\_LEFT}{AUDVOL\_VOL\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+V\+O\+L\+\_\+\+V\+O\+L\+\_\+\+L\+E\+FT(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~((x) $<$$<$ 4)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aabac77131d22297a246a3cfb0e443605}\label{gb_2hardware_8h_aabac77131d22297a246a3cfb0e443605}}
+\index{hardware.h@{hardware.h}!AUDVOL\_VOL\_RIGHT@{AUDVOL\_VOL\_RIGHT}}
+\index{AUDVOL\_VOL\_RIGHT@{AUDVOL\_VOL\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDVOL\_VOL\_RIGHT}{AUDVOL\_VOL\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+V\+O\+L\+\_\+\+V\+O\+L\+\_\+\+R\+I\+G\+HT(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~((x))}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a8cb754b63b073abf30af3fd6f0052832}\label{gb_2hardware_8h_a8cb754b63b073abf30af3fd6f0052832}}
+\index{hardware.h@{hardware.h}!AUDVOL\_VIN\_LEFT@{AUDVOL\_VIN\_LEFT}}
+\index{AUDVOL\_VIN\_LEFT@{AUDVOL\_VIN\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDVOL\_VIN\_LEFT}{AUDVOL\_VIN\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+V\+O\+L\+\_\+\+V\+I\+N\+\_\+\+L\+E\+FT~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa257f1e89f6782714cbc76ffc71d0fe7}\label{gb_2hardware_8h_aa257f1e89f6782714cbc76ffc71d0fe7}}
+\index{hardware.h@{hardware.h}!AUDVOL\_VIN\_RIGHT@{AUDVOL\_VIN\_RIGHT}}
+\index{AUDVOL\_VIN\_RIGHT@{AUDVOL\_VIN\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDVOL\_VIN\_RIGHT}{AUDVOL\_VIN\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+V\+O\+L\+\_\+\+V\+I\+N\+\_\+\+R\+I\+G\+HT~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ad2891216d025f44b02350f2ae2612b1e}\label{gb_2hardware_8h_ad2891216d025f44b02350f2ae2612b1e}}
+\index{hardware.h@{hardware.h}!rAUDTERM@{rAUDTERM}}
+\index{rAUDTERM@{rAUDTERM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUDTERM}{rAUDTERM}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D\+T\+E\+RM~\mbox{\hyperlink{gb_2hardware_8h_ab28f97eabd5f32d48ea27d97bd5dc64f}{N\+R51\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_af9a0eee23057665604c258abc667939d}\label{gb_2hardware_8h_af9a0eee23057665604c258abc667939d}}
+\index{hardware.h@{hardware.h}!AUDTERM\_4\_LEFT@{AUDTERM\_4\_LEFT}}
+\index{AUDTERM\_4\_LEFT@{AUDTERM\_4\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_4\_LEFT}{AUDTERM\_4\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+4\+\_\+\+L\+E\+FT~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac1470febab4adcff88b31a465d480f72}\label{gb_2hardware_8h_ac1470febab4adcff88b31a465d480f72}}
+\index{hardware.h@{hardware.h}!AUDTERM\_3\_LEFT@{AUDTERM\_3\_LEFT}}
+\index{AUDTERM\_3\_LEFT@{AUDTERM\_3\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_3\_LEFT}{AUDTERM\_3\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+3\+\_\+\+L\+E\+FT~0b01000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a309d26015522c2de1cff39ba6e6e6a04}\label{gb_2hardware_8h_a309d26015522c2de1cff39ba6e6e6a04}}
+\index{hardware.h@{hardware.h}!AUDTERM\_2\_LEFT@{AUDTERM\_2\_LEFT}}
+\index{AUDTERM\_2\_LEFT@{AUDTERM\_2\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_2\_LEFT}{AUDTERM\_2\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+2\+\_\+\+L\+E\+FT~0b00100000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aad3ccece4257429e82186f7b4d72b220}\label{gb_2hardware_8h_aad3ccece4257429e82186f7b4d72b220}}
+\index{hardware.h@{hardware.h}!AUDTERM\_1\_LEFT@{AUDTERM\_1\_LEFT}}
+\index{AUDTERM\_1\_LEFT@{AUDTERM\_1\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_1\_LEFT}{AUDTERM\_1\_LEFT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+1\+\_\+\+L\+E\+FT~0b00010000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a2ba607e94d30ae8eeb1933c9dabbf68d}\label{gb_2hardware_8h_a2ba607e94d30ae8eeb1933c9dabbf68d}}
+\index{hardware.h@{hardware.h}!AUDTERM\_4\_RIGHT@{AUDTERM\_4\_RIGHT}}
+\index{AUDTERM\_4\_RIGHT@{AUDTERM\_4\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_4\_RIGHT}{AUDTERM\_4\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+4\+\_\+\+R\+I\+G\+HT~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_adc74cebc6671c48bd502667f21d24da4}\label{gb_2hardware_8h_adc74cebc6671c48bd502667f21d24da4}}
+\index{hardware.h@{hardware.h}!AUDTERM\_3\_RIGHT@{AUDTERM\_3\_RIGHT}}
+\index{AUDTERM\_3\_RIGHT@{AUDTERM\_3\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_3\_RIGHT}{AUDTERM\_3\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+3\+\_\+\+R\+I\+G\+HT~0b00000100}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a6fb64712b06118cad702691f2aa18cd4}\label{gb_2hardware_8h_a6fb64712b06118cad702691f2aa18cd4}}
+\index{hardware.h@{hardware.h}!AUDTERM\_2\_RIGHT@{AUDTERM\_2\_RIGHT}}
+\index{AUDTERM\_2\_RIGHT@{AUDTERM\_2\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_2\_RIGHT}{AUDTERM\_2\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+2\+\_\+\+R\+I\+G\+HT~0b00000010}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa3cdccfb4b6b42cdee682bdb6e4fc310}\label{gb_2hardware_8h_aa3cdccfb4b6b42cdee682bdb6e4fc310}}
+\index{hardware.h@{hardware.h}!AUDTERM\_1\_RIGHT@{AUDTERM\_1\_RIGHT}}
+\index{AUDTERM\_1\_RIGHT@{AUDTERM\_1\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDTERM\_1\_RIGHT}{AUDTERM\_1\_RIGHT}}
+{\footnotesize\ttfamily \#define A\+U\+D\+T\+E\+R\+M\+\_\+1\+\_\+\+R\+I\+G\+HT~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a627044263543a1074dc9f4570aa8c915}\label{gb_2hardware_8h_a627044263543a1074dc9f4570aa8c915}}
+\index{hardware.h@{hardware.h}!rAUDENA@{rAUDENA}}
+\index{rAUDENA@{rAUDENA}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rAUDENA}{rAUDENA}}
+{\footnotesize\ttfamily \#define r\+A\+U\+D\+E\+NA~\mbox{\hyperlink{gb_2hardware_8h_ac429365dce851ca57d8fe4f7c54a1caa}{N\+R52\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7bbcf10e7a2b69127cd2f9e598bf601f}\label{gb_2hardware_8h_a7bbcf10e7a2b69127cd2f9e598bf601f}}
+\index{hardware.h@{hardware.h}!AUDENA\_ON@{AUDENA\_ON}}
+\index{AUDENA\_ON@{AUDENA\_ON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENA\_ON}{AUDENA\_ON}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+A\+\_\+\+ON~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a1b424d8f8a7438d19261401a843263d2}\label{gb_2hardware_8h_a1b424d8f8a7438d19261401a843263d2}}
+\index{hardware.h@{hardware.h}!AUDENA\_OFF@{AUDENA\_OFF}}
+\index{AUDENA\_OFF@{AUDENA\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENA\_OFF}{AUDENA\_OFF}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+A\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}\label{gb_2hardware_8h_a8b576a1fe1473ac4aff8afecb28035cb}}
+\index{hardware.h@{hardware.h}!rLCDC@{rLCDC}}
+\index{rLCDC@{rLCDC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rLCDC}{rLCDC}}
+{\footnotesize\ttfamily \#define r\+L\+C\+DC~\mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae9de9f58318f113afbc955986a502692}\label{gb_2hardware_8h_ae9de9f58318f113afbc955986a502692}}
+\index{hardware.h@{hardware.h}!LCDCF\_OFF@{LCDCF\_OFF}}
+\index{LCDCF\_OFF@{LCDCF\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_OFF}{LCDCF\_OFF}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+O\+FF~0b00000000}
+
+L\+CD Control\+: Off \mbox{\Hypertarget{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}\label{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}}
+\index{hardware.h@{hardware.h}!LCDCF\_ON@{LCDCF\_ON}}
+\index{LCDCF\_ON@{LCDCF\_ON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_ON}{LCDCF\_ON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+ON~0b10000000}
+
+L\+CD Control\+: On \mbox{\Hypertarget{gb_2hardware_8h_a178a111ffe8eb38a2875fcaf3bfeba3f}\label{gb_2hardware_8h_a178a111ffe8eb38a2875fcaf3bfeba3f}}
+\index{hardware.h@{hardware.h}!LCDCF\_WIN9800@{LCDCF\_WIN9800}}
+\index{LCDCF\_WIN9800@{LCDCF\_WIN9800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_WIN9800}{LCDCF\_WIN9800}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+W\+I\+N9800~0b00000000}
+
+Window Tile Map\+: Use 9800 Region \mbox{\Hypertarget{gb_2hardware_8h_a9d555b0c19019150db73ca245ca62a78}\label{gb_2hardware_8h_a9d555b0c19019150db73ca245ca62a78}}
+\index{hardware.h@{hardware.h}!LCDCF\_WIN9C00@{LCDCF\_WIN9C00}}
+\index{LCDCF\_WIN9C00@{LCDCF\_WIN9C00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_WIN9C00}{LCDCF\_WIN9C00}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+W\+I\+N9\+C00~0b01000000}
+
+Window Tile Map\+: Use 9C00 Region \mbox{\Hypertarget{gb_2hardware_8h_a582ece3b5f6cc49d47b2ad3e16d47374}\label{gb_2hardware_8h_a582ece3b5f6cc49d47b2ad3e16d47374}}
+\index{hardware.h@{hardware.h}!LCDCF\_WINOFF@{LCDCF\_WINOFF}}
+\index{LCDCF\_WINOFF@{LCDCF\_WINOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_WINOFF}{LCDCF\_WINOFF}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+O\+FF~0b00000000}
+
+Window Display\+: Hidden \mbox{\Hypertarget{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}\label{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}}
+\index{hardware.h@{hardware.h}!LCDCF\_WINON@{LCDCF\_WINON}}
+\index{LCDCF\_WINON@{LCDCF\_WINON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_WINON}{LCDCF\_WINON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON~0b00100000}
+
+Window Display\+: Visible \mbox{\Hypertarget{gb_2hardware_8h_a69a43daf29c680b3ab0fbcad3118cd48}\label{gb_2hardware_8h_a69a43daf29c680b3ab0fbcad3118cd48}}
+\index{hardware.h@{hardware.h}!LCDCF\_BG8800@{LCDCF\_BG8800}}
+\index{LCDCF\_BG8800@{LCDCF\_BG8800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BG8800}{LCDCF\_BG8800}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G8800~0b00000000}
+
+BG \& Window Tile Data\+: Use 8800 Region \mbox{\Hypertarget{gb_2hardware_8h_a731588b96fb8cdbeb7e68c089373e6f8}\label{gb_2hardware_8h_a731588b96fb8cdbeb7e68c089373e6f8}}
+\index{hardware.h@{hardware.h}!LCDCF\_BG8000@{LCDCF\_BG8000}}
+\index{LCDCF\_BG8000@{LCDCF\_BG8000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BG8000}{LCDCF\_BG8000}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G8000~0b00010000}
+
+BG \& Window Tile Data\+: Use 8000 Region \mbox{\Hypertarget{gb_2hardware_8h_ae4e03124190c7f96586b75cb4470a210}\label{gb_2hardware_8h_ae4e03124190c7f96586b75cb4470a210}}
+\index{hardware.h@{hardware.h}!LCDCF\_BG9800@{LCDCF\_BG9800}}
+\index{LCDCF\_BG9800@{LCDCF\_BG9800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BG9800}{LCDCF\_BG9800}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G9800~0b00000000}
+
+BG Tile Map\+: use 9800 Region \mbox{\Hypertarget{gb_2hardware_8h_a2e2a68c3274055a06cf38d00f007d4bf}\label{gb_2hardware_8h_a2e2a68c3274055a06cf38d00f007d4bf}}
+\index{hardware.h@{hardware.h}!LCDCF\_BG9C00@{LCDCF\_BG9C00}}
+\index{LCDCF\_BG9C00@{LCDCF\_BG9C00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BG9C00}{LCDCF\_BG9C00}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G9\+C00~0b00001000}
+
+BG Tile Map\+: use 9C00 Region \mbox{\Hypertarget{gb_2hardware_8h_a1452fbc14f59076347c4cd4864fbeb51}\label{gb_2hardware_8h_a1452fbc14f59076347c4cd4864fbeb51}}
+\index{hardware.h@{hardware.h}!LCDCF\_OBJ8@{LCDCF\_OBJ8}}
+\index{LCDCF\_OBJ8@{LCDCF\_OBJ8}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_OBJ8}{LCDCF\_OBJ8}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+O\+B\+J8~0b00000000}
+
+Sprites Size\+: 8x8 pixels \mbox{\Hypertarget{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}\label{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}}
+\index{hardware.h@{hardware.h}!LCDCF\_OBJ16@{LCDCF\_OBJ16}}
+\index{LCDCF\_OBJ16@{LCDCF\_OBJ16}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_OBJ16}{LCDCF\_OBJ16}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+O\+B\+J16~0b00000100}
+
+Sprites Size\+: 8x16 pixels \mbox{\Hypertarget{gb_2hardware_8h_af14334f65debf6ee02cc21b58729cfde}\label{gb_2hardware_8h_af14334f65debf6ee02cc21b58729cfde}}
+\index{hardware.h@{hardware.h}!LCDCF\_OBJOFF@{LCDCF\_OBJOFF}}
+\index{LCDCF\_OBJOFF@{LCDCF\_OBJOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_OBJOFF}{LCDCF\_OBJOFF}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+O\+FF~0b00000000}
+
+Sprites Display\+: Hidden \mbox{\Hypertarget{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}\label{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}}
+\index{hardware.h@{hardware.h}!LCDCF\_OBJON@{LCDCF\_OBJON}}
+\index{LCDCF\_OBJON@{LCDCF\_OBJON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_OBJON}{LCDCF\_OBJON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON~0b00000010}
+
+Sprites Display\+: Visible \mbox{\Hypertarget{gb_2hardware_8h_aa8027f47983459c377169f57987b710c}\label{gb_2hardware_8h_aa8027f47983459c377169f57987b710c}}
+\index{hardware.h@{hardware.h}!LCDCF\_BGOFF@{LCDCF\_BGOFF}}
+\index{LCDCF\_BGOFF@{LCDCF\_BGOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BGOFF}{LCDCF\_BGOFF}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G\+O\+FF~0b00000000}
+
+Background Display\+: Hidden \mbox{\Hypertarget{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}\label{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}}
+\index{hardware.h@{hardware.h}!LCDCF\_BGON@{LCDCF\_BGON}}
+\index{LCDCF\_BGON@{LCDCF\_BGON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_BGON}{LCDCF\_BGON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+G\+ON~0b00000001}
+
+Background Display\+: Visible \mbox{\Hypertarget{gb_2hardware_8h_ac112618942cb4719def91693616baaff}\label{gb_2hardware_8h_ac112618942cb4719def91693616baaff}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_ON@{LCDCF\_B\_ON}}
+\index{LCDCF\_B\_ON@{LCDCF\_B\_ON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_ON}{LCDCF\_B\_ON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+ON~7}
+
+Bit for L\+CD On/\+Off Select \mbox{\Hypertarget{gb_2hardware_8h_ac826fdb70a043ebb8f1b317b00db6ff3}\label{gb_2hardware_8h_ac826fdb70a043ebb8f1b317b00db6ff3}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_WIN9C00@{LCDCF\_B\_WIN9C00}}
+\index{LCDCF\_B\_WIN9C00@{LCDCF\_B\_WIN9C00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_WIN9C00}{LCDCF\_B\_WIN9C00}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+W\+I\+N9\+C00~6}
+
+Bit for Window Tile Map Region Select \mbox{\Hypertarget{gb_2hardware_8h_ae1de721c95ddc8f29ba9b9deaee8d68c}\label{gb_2hardware_8h_ae1de721c95ddc8f29ba9b9deaee8d68c}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_WINON@{LCDCF\_B\_WINON}}
+\index{LCDCF\_B\_WINON@{LCDCF\_B\_WINON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_WINON}{LCDCF\_B\_WINON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+W\+I\+N\+ON~5}
+
+Bit for Window Display On/\+Off Control \mbox{\Hypertarget{gb_2hardware_8h_aa336ca1c8bd29763222fc011a6272bdf}\label{gb_2hardware_8h_aa336ca1c8bd29763222fc011a6272bdf}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_BG8000@{LCDCF\_B\_BG8000}}
+\index{LCDCF\_B\_BG8000@{LCDCF\_B\_BG8000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_BG8000}{LCDCF\_B\_BG8000}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G8000~4}
+
+Bit for BG \& Window Tile Data Region Select \mbox{\Hypertarget{gb_2hardware_8h_a4889bb882e956665069212c4c8aa623b}\label{gb_2hardware_8h_a4889bb882e956665069212c4c8aa623b}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_BG9C00@{LCDCF\_B\_BG9C00}}
+\index{LCDCF\_B\_BG9C00@{LCDCF\_B\_BG9C00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_BG9C00}{LCDCF\_B\_BG9C00}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G9\+C00~3}
+
+Bit for BG Tile Map Region Select \mbox{\Hypertarget{gb_2hardware_8h_aa8f5bcd5073aae5948a9647dcb76f779}\label{gb_2hardware_8h_aa8f5bcd5073aae5948a9647dcb76f779}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_OBJ16@{LCDCF\_B\_OBJ16}}
+\index{LCDCF\_B\_OBJ16@{LCDCF\_B\_OBJ16}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_OBJ16}{LCDCF\_B\_OBJ16}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+O\+B\+J16~2}
+
+Bit for Sprites Size Select \mbox{\Hypertarget{gb_2hardware_8h_a6f6852d0f1d295b03e1230d5d97cb3e9}\label{gb_2hardware_8h_a6f6852d0f1d295b03e1230d5d97cb3e9}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_OBJON@{LCDCF\_B\_OBJON}}
+\index{LCDCF\_B\_OBJON@{LCDCF\_B\_OBJON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_OBJON}{LCDCF\_B\_OBJON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+O\+B\+J\+ON~1}
+
+Bit for Sprites Display Visible/\+Hidden Select \mbox{\Hypertarget{gb_2hardware_8h_aa1f66868f63af2af6544e84122de3cc3}\label{gb_2hardware_8h_aa1f66868f63af2af6544e84122de3cc3}}
+\index{hardware.h@{hardware.h}!LCDCF\_B\_BGON@{LCDCF\_B\_BGON}}
+\index{LCDCF\_B\_BGON@{LCDCF\_B\_BGON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDCF\_B\_BGON}{LCDCF\_B\_BGON}}
+{\footnotesize\ttfamily \#define L\+C\+D\+C\+F\+\_\+\+B\+\_\+\+B\+G\+ON~0}
+
+Bit for Background Display Visible/\+Hidden Select \mbox{\Hypertarget{gb_2hardware_8h_a338ec378453b4457efdb3008978c0f28}\label{gb_2hardware_8h_a338ec378453b4457efdb3008978c0f28}}
+\index{hardware.h@{hardware.h}!rSTAT@{rSTAT}}
+\index{rSTAT@{rSTAT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSTAT}{rSTAT}}
+{\footnotesize\ttfamily \#define r\+S\+T\+AT~\mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3b53105cc5be896b48794ba82d2aeb4c}\label{gb_2hardware_8h_a3b53105cc5be896b48794ba82d2aeb4c}}
+\index{hardware.h@{hardware.h}!STATF\_LYC@{STATF\_LYC}}
+\index{STATF\_LYC@{STATF\_LYC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_LYC}{STATF\_LYC}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+L\+YC~0b01000000}
+
+S\+T\+AT Interrupt\+: L\+YC=LY Coincidence Source Enable \mbox{\Hypertarget{gb_2hardware_8h_a47b5bc2ec6afaf1d50a8db5f24415922}\label{gb_2hardware_8h_a47b5bc2ec6afaf1d50a8db5f24415922}}
+\index{hardware.h@{hardware.h}!STATF\_MODE10@{STATF\_MODE10}}
+\index{STATF\_MODE10@{STATF\_MODE10}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_MODE10}{STATF\_MODE10}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E10~0b00100000}
+
+S\+T\+AT Interrupt\+: Mode 2 O\+AM Source Enable \mbox{\Hypertarget{gb_2hardware_8h_ad27f428fca89ea6b236ff3aa4769a05e}\label{gb_2hardware_8h_ad27f428fca89ea6b236ff3aa4769a05e}}
+\index{hardware.h@{hardware.h}!STATF\_MODE01@{STATF\_MODE01}}
+\index{STATF\_MODE01@{STATF\_MODE01}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_MODE01}{STATF\_MODE01}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E01~0b00010000}
+
+S\+T\+AT Interrupt\+: Mode 1 V\+Blank Source Enable \mbox{\Hypertarget{gb_2hardware_8h_a72b78d4d640033770be37d95bf8e1f9d}\label{gb_2hardware_8h_a72b78d4d640033770be37d95bf8e1f9d}}
+\index{hardware.h@{hardware.h}!STATF\_MODE00@{STATF\_MODE00}}
+\index{STATF\_MODE00@{STATF\_MODE00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_MODE00}{STATF\_MODE00}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+M\+O\+D\+E00~0b00001000}
+
+S\+T\+AT Interrupt\+: Mode 0 H\+Blank Source Enable ~\newline
+ \mbox{\Hypertarget{gb_2hardware_8h_a2b3637bad69da368c3d7136632963fb7}\label{gb_2hardware_8h_a2b3637bad69da368c3d7136632963fb7}}
+\index{hardware.h@{hardware.h}!STATF\_LYCF@{STATF\_LYCF}}
+\index{STATF\_LYCF@{STATF\_LYCF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_LYCF}{STATF\_LYCF}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+L\+Y\+CF~0b00000100}
+
+L\+YC=LY Coincidence Status Flag, Set when LY contains the same value as L\+YC \mbox{\Hypertarget{gb_2hardware_8h_ab04e468d2403bc69f761daa300bb999a}\label{gb_2hardware_8h_ab04e468d2403bc69f761daa300bb999a}}
+\index{hardware.h@{hardware.h}!STATF\_HBL@{STATF\_HBL}}
+\index{STATF\_HBL@{STATF\_HBL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_HBL}{STATF\_HBL}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+H\+BL~0b00000000}
+
+Current L\+CD Mode is\+: 0, in H-\/\+Blank \mbox{\Hypertarget{gb_2hardware_8h_adb52e1f4b56ef259db300a187fe58fc9}\label{gb_2hardware_8h_adb52e1f4b56ef259db300a187fe58fc9}}
+\index{hardware.h@{hardware.h}!STATF\_VBL@{STATF\_VBL}}
+\index{STATF\_VBL@{STATF\_VBL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_VBL}{STATF\_VBL}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+V\+BL~0b00000001}
+
+Current L\+CD Mode is\+: 1, in V-\/\+Blank \mbox{\Hypertarget{gb_2hardware_8h_acc45e1a4ea60d8248102a71c1658c5a3}\label{gb_2hardware_8h_acc45e1a4ea60d8248102a71c1658c5a3}}
+\index{hardware.h@{hardware.h}!STATF\_OAM@{STATF\_OAM}}
+\index{STATF\_OAM@{STATF\_OAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_OAM}{STATF\_OAM}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+O\+AM~0b00000010}
+
+Current L\+CD Mode is\+: 2, in O\+A\+M-\/\+R\+AM is used by system (Searching O\+AM) \mbox{\Hypertarget{gb_2hardware_8h_a6f5df560b791d2fc086c23f99dd03354}\label{gb_2hardware_8h_a6f5df560b791d2fc086c23f99dd03354}}
+\index{hardware.h@{hardware.h}!STATF\_LCD@{STATF\_LCD}}
+\index{STATF\_LCD@{STATF\_LCD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_LCD}{STATF\_LCD}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+L\+CD~0b00000011}
+
+Current L\+CD Mode is\+: 3, both O\+AM and V\+R\+AM used by system (Transferring Data to L\+CD Controller) \mbox{\Hypertarget{gb_2hardware_8h_a92a063885caf6c6cda665da0309055ec}\label{gb_2hardware_8h_a92a063885caf6c6cda665da0309055ec}}
+\index{hardware.h@{hardware.h}!STATF\_BUSY@{STATF\_BUSY}}
+\index{STATF\_BUSY@{STATF\_BUSY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_BUSY}{STATF\_BUSY}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+U\+SY~0b00000010}
+
+When set, V\+R\+AM access is unsafe \mbox{\Hypertarget{gb_2hardware_8h_ac1e4b66204a5bff207be36fdfedd63d5}\label{gb_2hardware_8h_ac1e4b66204a5bff207be36fdfedd63d5}}
+\index{hardware.h@{hardware.h}!STATF\_B\_LYC@{STATF\_B\_LYC}}
+\index{STATF\_B\_LYC@{STATF\_B\_LYC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_LYC}{STATF\_B\_LYC}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+L\+YC~6}
+
+Bit for S\+T\+AT Interrupt\+: L\+YC=LY Coincidence Source Enable \mbox{\Hypertarget{gb_2hardware_8h_ac75479aa0d34ac4344d80451276e97cc}\label{gb_2hardware_8h_ac75479aa0d34ac4344d80451276e97cc}}
+\index{hardware.h@{hardware.h}!STATF\_B\_MODE10@{STATF\_B\_MODE10}}
+\index{STATF\_B\_MODE10@{STATF\_B\_MODE10}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_MODE10}{STATF\_B\_MODE10}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E10~5}
+
+Bit for S\+T\+AT Interrupt\+: Mode 2 O\+AM Source Enable \mbox{\Hypertarget{gb_2hardware_8h_a5b683ff804221c6fc721b996fce65bda}\label{gb_2hardware_8h_a5b683ff804221c6fc721b996fce65bda}}
+\index{hardware.h@{hardware.h}!STATF\_B\_MODE01@{STATF\_B\_MODE01}}
+\index{STATF\_B\_MODE01@{STATF\_B\_MODE01}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_MODE01}{STATF\_B\_MODE01}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E01~4}
+
+Bit for S\+T\+AT Interrupt\+: Mode 1 V\+Blank Source Enable \mbox{\Hypertarget{gb_2hardware_8h_acdbf6b3217f6a5681df94c8b8992d1d6}\label{gb_2hardware_8h_acdbf6b3217f6a5681df94c8b8992d1d6}}
+\index{hardware.h@{hardware.h}!STATF\_B\_MODE00@{STATF\_B\_MODE00}}
+\index{STATF\_B\_MODE00@{STATF\_B\_MODE00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_MODE00}{STATF\_B\_MODE00}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+M\+O\+D\+E00~3}
+
+Bit for S\+T\+AT Interrupt\+: Mode 0 H\+Blank Source Enable ~\newline
+ \mbox{\Hypertarget{gb_2hardware_8h_ab058c32e4ebf21b3beb06a0d7440e6ad}\label{gb_2hardware_8h_ab058c32e4ebf21b3beb06a0d7440e6ad}}
+\index{hardware.h@{hardware.h}!STATF\_B\_LYCF@{STATF\_B\_LYCF}}
+\index{STATF\_B\_LYCF@{STATF\_B\_LYCF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_LYCF}{STATF\_B\_LYCF}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+L\+Y\+CF~2}
+
+Bit for L\+YC=LY Coincidence Status Flag \mbox{\Hypertarget{gb_2hardware_8h_a55c4815aea004a9951606db7e7a1f0d7}\label{gb_2hardware_8h_a55c4815aea004a9951606db7e7a1f0d7}}
+\index{hardware.h@{hardware.h}!STATF\_B\_VBL@{STATF\_B\_VBL}}
+\index{STATF\_B\_VBL@{STATF\_B\_VBL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_VBL}{STATF\_B\_VBL}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+V\+BL~0}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7393f505e4277af40167d72415c46fa5}\label{gb_2hardware_8h_a7393f505e4277af40167d72415c46fa5}}
+\index{hardware.h@{hardware.h}!STATF\_B\_OAM@{STATF\_B\_OAM}}
+\index{STATF\_B\_OAM@{STATF\_B\_OAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_OAM}{STATF\_B\_OAM}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+O\+AM~1}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3b0bf7449b517b3cda2a89428db6deb9}\label{gb_2hardware_8h_a3b0bf7449b517b3cda2a89428db6deb9}}
+\index{hardware.h@{hardware.h}!STATF\_B\_BUSY@{STATF\_B\_BUSY}}
+\index{STATF\_B\_BUSY@{STATF\_B\_BUSY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_B\_BUSY}{STATF\_B\_BUSY}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+B\+\_\+\+B\+U\+SY~1}
+
+Bit for when V\+R\+AM access is unsafe \mbox{\Hypertarget{gb_2hardware_8h_ad2537c13699429afa59a68c6d6598632}\label{gb_2hardware_8h_ad2537c13699429afa59a68c6d6598632}}
+\index{hardware.h@{hardware.h}!rSCY@{rSCY}}
+\index{rSCY@{rSCY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSCY}{rSCY}}
+{\footnotesize\ttfamily \#define r\+S\+CY}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a97932e023d96ece4715802b6c2565c43}\label{gb_2hardware_8h_a97932e023d96ece4715802b6c2565c43}}
+\index{hardware.h@{hardware.h}!rSCX@{rSCX}}
+\index{rSCX@{rSCX}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSCX}{rSCX}}
+{\footnotesize\ttfamily \#define r\+S\+CX~\mbox{\hyperlink{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}{S\+C\+X\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa851dae67d0bb80c17415774558d985f}\label{gb_2hardware_8h_aa851dae67d0bb80c17415774558d985f}}
+\index{hardware.h@{hardware.h}!rLY@{rLY}}
+\index{rLY@{rLY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rLY}{rLY}}
+{\footnotesize\ttfamily \#define r\+LY~\mbox{\hyperlink{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}{L\+Y\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a92083741d31c9b2206b403e97124cbdc}\label{gb_2hardware_8h_a92083741d31c9b2206b403e97124cbdc}}
+\index{hardware.h@{hardware.h}!rLYC@{rLYC}}
+\index{rLYC@{rLYC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rLYC}{rLYC}}
+{\footnotesize\ttfamily \#define r\+L\+YC~\mbox{\hyperlink{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}{L\+Y\+C\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a4225227c2812c3e3e500441f5e90772a}\label{gb_2hardware_8h_a4225227c2812c3e3e500441f5e90772a}}
+\index{hardware.h@{hardware.h}!rDMA@{rDMA}}
+\index{rDMA@{rDMA}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rDMA}{rDMA}}
+{\footnotesize\ttfamily \#define r\+D\+MA~\mbox{\hyperlink{gb_2hardware_8h_ae13ce414d3fe7c98c1434918186dfc81}{D\+M\+A\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a4fbcc4798c0721efcf4462c04a4566c1}\label{gb_2hardware_8h_a4fbcc4798c0721efcf4462c04a4566c1}}
+\index{hardware.h@{hardware.h}!rBGP@{rBGP}}
+\index{rBGP@{rBGP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rBGP}{rBGP}}
+{\footnotesize\ttfamily \#define r\+B\+GP~\mbox{\hyperlink{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}{B\+G\+P\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae0a85bdedbbf1c79b5dbb5b23ca4bf79}\label{gb_2hardware_8h_ae0a85bdedbbf1c79b5dbb5b23ca4bf79}}
+\index{hardware.h@{hardware.h}!rOBP0@{rOBP0}}
+\index{rOBP0@{rOBP0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rOBP0}{rOBP0}}
+{\footnotesize\ttfamily \#define r\+O\+B\+P0~\mbox{\hyperlink{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}{O\+B\+P0\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a2a14470dca10f69c092d817a433383bd}\label{gb_2hardware_8h_a2a14470dca10f69c092d817a433383bd}}
+\index{hardware.h@{hardware.h}!rOBP1@{rOBP1}}
+\index{rOBP1@{rOBP1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rOBP1}{rOBP1}}
+{\footnotesize\ttfamily \#define r\+O\+B\+P1~\mbox{\hyperlink{gb_2hardware_8h_a9da545164e049ef773128f869daece13}{O\+B\+P1\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_afe84077234eb6e0520d7a6d0a9e903e7}\label{gb_2hardware_8h_afe84077234eb6e0520d7a6d0a9e903e7}}
+\index{hardware.h@{hardware.h}!rWY@{rWY}}
+\index{rWY@{rWY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rWY}{rWY}}
+{\footnotesize\ttfamily \#define r\+WY~\mbox{\hyperlink{gb_2hardware_8h_a1c8d52607616ef37da335447e4cbe850}{W\+Y\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aba3cbaeca5ad045fb27095c210b661b7}\label{gb_2hardware_8h_aba3cbaeca5ad045fb27095c210b661b7}}
+\index{hardware.h@{hardware.h}!rWX@{rWX}}
+\index{rWX@{rWX}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rWX}{rWX}}
+{\footnotesize\ttfamily \#define r\+WX~\mbox{\hyperlink{gb_2hardware_8h_a310aa43fbee2fd6b6b419df48acce1e0}{W\+X\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ad3f67013699d0d38c203e4e863c91c41}\label{gb_2hardware_8h_ad3f67013699d0d38c203e4e863c91c41}}
+\index{hardware.h@{hardware.h}!rKEY1@{rKEY1}}
+\index{rKEY1@{rKEY1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rKEY1}{rKEY1}}
+{\footnotesize\ttfamily \#define r\+K\+E\+Y1~\mbox{\hyperlink{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}{K\+E\+Y1\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a222d5e3cb366d5e720a832fc68ce3a13}\label{gb_2hardware_8h_a222d5e3cb366d5e720a832fc68ce3a13}}
+\index{hardware.h@{hardware.h}!rSPD@{rSPD}}
+\index{rSPD@{rSPD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSPD}{rSPD}}
+{\footnotesize\ttfamily \#define r\+S\+PD~\mbox{\hyperlink{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}{K\+E\+Y1\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a793b667a76985934545f73268000371a}\label{gb_2hardware_8h_a793b667a76985934545f73268000371a}}
+\index{hardware.h@{hardware.h}!KEY1F\_DBLSPEED@{KEY1F\_DBLSPEED}}
+\index{KEY1F\_DBLSPEED@{KEY1F\_DBLSPEED}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{KEY1F\_DBLSPEED}{KEY1F\_DBLSPEED}}
+{\footnotesize\ttfamily \#define K\+E\+Y1\+F\+\_\+\+D\+B\+L\+S\+P\+E\+ED~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3205df57bc17c35df2924296341c6c69}\label{gb_2hardware_8h_a3205df57bc17c35df2924296341c6c69}}
+\index{hardware.h@{hardware.h}!KEY1F\_PREPARE@{KEY1F\_PREPARE}}
+\index{KEY1F\_PREPARE@{KEY1F\_PREPARE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{KEY1F\_PREPARE}{KEY1F\_PREPARE}}
+{\footnotesize\ttfamily \#define K\+E\+Y1\+F\+\_\+\+P\+R\+E\+P\+A\+RE~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a09fa1caa91313e57dc2c3dd354104b00}\label{gb_2hardware_8h_a09fa1caa91313e57dc2c3dd354104b00}}
+\index{hardware.h@{hardware.h}!rVBK@{rVBK}}
+\index{rVBK@{rVBK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rVBK}{rVBK}}
+{\footnotesize\ttfamily \#define r\+V\+BK~\mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a5011196496193d80fc58cdb632fbab24}\label{gb_2hardware_8h_a5011196496193d80fc58cdb632fbab24}}
+\index{hardware.h@{hardware.h}!rHDMA1@{rHDMA1}}
+\index{rHDMA1@{rHDMA1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rHDMA1}{rHDMA1}}
+{\footnotesize\ttfamily \#define r\+H\+D\+M\+A1~\mbox{\hyperlink{gb_2hardware_8h_ab16e97796d675205a027b1b28b52956e}{H\+D\+M\+A1\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abc4249f04a9081f45439f61dabf861e5}\label{gb_2hardware_8h_abc4249f04a9081f45439f61dabf861e5}}
+\index{hardware.h@{hardware.h}!rHDMA2@{rHDMA2}}
+\index{rHDMA2@{rHDMA2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rHDMA2}{rHDMA2}}
+{\footnotesize\ttfamily \#define r\+H\+D\+M\+A2~\mbox{\hyperlink{gb_2hardware_8h_a801400d58ab7d862742e43b49fa68c8d}{H\+D\+M\+A2\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aca2df62463b4c3bc4a291e18f26f4ec5}\label{gb_2hardware_8h_aca2df62463b4c3bc4a291e18f26f4ec5}}
+\index{hardware.h@{hardware.h}!rHDMA3@{rHDMA3}}
+\index{rHDMA3@{rHDMA3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rHDMA3}{rHDMA3}}
+{\footnotesize\ttfamily \#define r\+H\+D\+M\+A3~\mbox{\hyperlink{gb_2hardware_8h_a57a94790cda8101a29c0d20086770f1b}{H\+D\+M\+A3\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_adee641ce3abf6b891e0e16bb56bdfcf7}\label{gb_2hardware_8h_adee641ce3abf6b891e0e16bb56bdfcf7}}
+\index{hardware.h@{hardware.h}!rHDMA4@{rHDMA4}}
+\index{rHDMA4@{rHDMA4}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rHDMA4}{rHDMA4}}
+{\footnotesize\ttfamily \#define r\+H\+D\+M\+A4~\mbox{\hyperlink{gb_2hardware_8h_a3a2e883779980c1c37e780f47da4dd69}{H\+D\+M\+A4\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ae7eecc25286b951a78ef0dfc97aab3a7}\label{gb_2hardware_8h_ae7eecc25286b951a78ef0dfc97aab3a7}}
+\index{hardware.h@{hardware.h}!rHDMA5@{rHDMA5}}
+\index{rHDMA5@{rHDMA5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rHDMA5}{rHDMA5}}
+{\footnotesize\ttfamily \#define r\+H\+D\+M\+A5~\mbox{\hyperlink{gb_2hardware_8h_a1454ad6d5d04273eae1288af86deadac}{H\+D\+M\+A5\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a2a1acb31d2869997315be64bff66d24b}\label{gb_2hardware_8h_a2a1acb31d2869997315be64bff66d24b}}
+\index{hardware.h@{hardware.h}!HDMA5F\_MODE\_GP@{HDMA5F\_MODE\_GP}}
+\index{HDMA5F\_MODE\_GP@{HDMA5F\_MODE\_GP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA5F\_MODE\_GP}{HDMA5F\_MODE\_GP}}
+{\footnotesize\ttfamily \#define H\+D\+M\+A5\+F\+\_\+\+M\+O\+D\+E\+\_\+\+GP~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3c22f7324f09a14d666f9b21a9742789}\label{gb_2hardware_8h_a3c22f7324f09a14d666f9b21a9742789}}
+\index{hardware.h@{hardware.h}!HDMA5F\_MODE\_HBL@{HDMA5F\_MODE\_HBL}}
+\index{HDMA5F\_MODE\_HBL@{HDMA5F\_MODE\_HBL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA5F\_MODE\_HBL}{HDMA5F\_MODE\_HBL}}
+{\footnotesize\ttfamily \#define H\+D\+M\+A5\+F\+\_\+\+M\+O\+D\+E\+\_\+\+H\+BL~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a37c8ee0ef95132fd22cd426868510834}\label{gb_2hardware_8h_a37c8ee0ef95132fd22cd426868510834}}
+\index{hardware.h@{hardware.h}!HDMA5F\_BUSY@{HDMA5F\_BUSY}}
+\index{HDMA5F\_BUSY@{HDMA5F\_BUSY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA5F\_BUSY}{HDMA5F\_BUSY}}
+{\footnotesize\ttfamily \#define H\+D\+M\+A5\+F\+\_\+\+B\+U\+SY~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a82c53e957d31d22c475e1629843bc12d}\label{gb_2hardware_8h_a82c53e957d31d22c475e1629843bc12d}}
+\index{hardware.h@{hardware.h}!rRP@{rRP}}
+\index{rRP@{rRP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rRP}{rRP}}
+{\footnotesize\ttfamily \#define r\+RP~\mbox{\hyperlink{gb_2hardware_8h_a76532f8742d9dd8cb26d2ccfd9c37bbf}{R\+P\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a092b2e33a050ac6ced4e897498ce9a2f}\label{gb_2hardware_8h_a092b2e33a050ac6ced4e897498ce9a2f}}
+\index{hardware.h@{hardware.h}!RPF\_ENREAD@{RPF\_ENREAD}}
+\index{RPF\_ENREAD@{RPF\_ENREAD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RPF\_ENREAD}{RPF\_ENREAD}}
+{\footnotesize\ttfamily \#define R\+P\+F\+\_\+\+E\+N\+R\+E\+AD~0b11000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aaffaea3512173f90b85bae710d40ba6c}\label{gb_2hardware_8h_aaffaea3512173f90b85bae710d40ba6c}}
+\index{hardware.h@{hardware.h}!RPF\_DATAIN@{RPF\_DATAIN}}
+\index{RPF\_DATAIN@{RPF\_DATAIN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RPF\_DATAIN}{RPF\_DATAIN}}
+{\footnotesize\ttfamily \#define R\+P\+F\+\_\+\+D\+A\+T\+A\+IN~0b00000010}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac47b78eb2ffea207a8c7ac643555ba6c}\label{gb_2hardware_8h_ac47b78eb2ffea207a8c7ac643555ba6c}}
+\index{hardware.h@{hardware.h}!RPF\_WRITE\_HI@{RPF\_WRITE\_HI}}
+\index{RPF\_WRITE\_HI@{RPF\_WRITE\_HI}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RPF\_WRITE\_HI}{RPF\_WRITE\_HI}}
+{\footnotesize\ttfamily \#define R\+P\+F\+\_\+\+W\+R\+I\+T\+E\+\_\+\+HI~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ab0fe74a7c155ae95cbf20bbb5e1bf46b}\label{gb_2hardware_8h_ab0fe74a7c155ae95cbf20bbb5e1bf46b}}
+\index{hardware.h@{hardware.h}!RPF\_WRITE\_LO@{RPF\_WRITE\_LO}}
+\index{RPF\_WRITE\_LO@{RPF\_WRITE\_LO}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RPF\_WRITE\_LO}{RPF\_WRITE\_LO}}
+{\footnotesize\ttfamily \#define R\+P\+F\+\_\+\+W\+R\+I\+T\+E\+\_\+\+LO~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a4f1816144e0561ff4db1ad24f4ce847a}\label{gb_2hardware_8h_a4f1816144e0561ff4db1ad24f4ce847a}}
+\index{hardware.h@{hardware.h}!rBCPS@{rBCPS}}
+\index{rBCPS@{rBCPS}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rBCPS}{rBCPS}}
+{\footnotesize\ttfamily \#define r\+B\+C\+PS~\mbox{\hyperlink{gb_2hardware_8h_a28fa1ca08ef1c8ed97280bc5e60bdd99}{B\+C\+P\+S\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a88cceb86b8168f4c539e9612a81145a6}\label{gb_2hardware_8h_a88cceb86b8168f4c539e9612a81145a6}}
+\index{hardware.h@{hardware.h}!BCPSF\_AUTOINC@{BCPSF\_AUTOINC}}
+\index{BCPSF\_AUTOINC@{BCPSF\_AUTOINC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{BCPSF\_AUTOINC}{BCPSF\_AUTOINC}}
+{\footnotesize\ttfamily \#define B\+C\+P\+S\+F\+\_\+\+A\+U\+T\+O\+I\+NC~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3dbfd7c3f4a62774fbc98caa73899e96}\label{gb_2hardware_8h_a3dbfd7c3f4a62774fbc98caa73899e96}}
+\index{hardware.h@{hardware.h}!rBCPD@{rBCPD}}
+\index{rBCPD@{rBCPD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rBCPD}{rBCPD}}
+{\footnotesize\ttfamily \#define r\+B\+C\+PD~\mbox{\hyperlink{gb_2hardware_8h_a1fc8ff37ffe1c431364e1ef7c3961b30}{B\+C\+P\+D\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a056b789889ecf0691e54f721e015b873}\label{gb_2hardware_8h_a056b789889ecf0691e54f721e015b873}}
+\index{hardware.h@{hardware.h}!rOCPS@{rOCPS}}
+\index{rOCPS@{rOCPS}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rOCPS}{rOCPS}}
+{\footnotesize\ttfamily \#define r\+O\+C\+PS~\mbox{\hyperlink{gb_2hardware_8h_a1686d2457eb4ad834bb75fb81c86aed8}{O\+C\+P\+S\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a0a6cc6543aa06c12b87e235c3d5da4ff}\label{gb_2hardware_8h_a0a6cc6543aa06c12b87e235c3d5da4ff}}
+\index{hardware.h@{hardware.h}!OCPSF\_AUTOINC@{OCPSF\_AUTOINC}}
+\index{OCPSF\_AUTOINC@{OCPSF\_AUTOINC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OCPSF\_AUTOINC}{OCPSF\_AUTOINC}}
+{\footnotesize\ttfamily \#define O\+C\+P\+S\+F\+\_\+\+A\+U\+T\+O\+I\+NC~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a723eb3e0c2c681a050e9a325e35c25ae}\label{gb_2hardware_8h_a723eb3e0c2c681a050e9a325e35c25ae}}
+\index{hardware.h@{hardware.h}!rOCPD@{rOCPD}}
+\index{rOCPD@{rOCPD}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rOCPD}{rOCPD}}
+{\footnotesize\ttfamily \#define r\+O\+C\+PD~\mbox{\hyperlink{gb_2hardware_8h_ae24d0e88a1e1b8367ac1f5709d3e500c}{O\+C\+P\+D\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a83e14896ee3ddf2a4201b534d8e5f398}\label{gb_2hardware_8h_a83e14896ee3ddf2a4201b534d8e5f398}}
+\index{hardware.h@{hardware.h}!rSVBK@{rSVBK}}
+\index{rSVBK@{rSVBK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSVBK}{rSVBK}}
+{\footnotesize\ttfamily \#define r\+S\+V\+BK~\mbox{\hyperlink{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}{S\+V\+B\+K\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_af93abe183851726958f27d979498032e}\label{gb_2hardware_8h_af93abe183851726958f27d979498032e}}
+\index{hardware.h@{hardware.h}!rSMBK@{rSMBK}}
+\index{rSMBK@{rSMBK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rSMBK}{rSMBK}}
+{\footnotesize\ttfamily \#define r\+S\+M\+BK~\mbox{\hyperlink{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}{S\+V\+B\+K\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a28368838b9e270c301361a5f39c97154}\label{gb_2hardware_8h_a28368838b9e270c301361a5f39c97154}}
+\index{hardware.h@{hardware.h}!rPCM12@{rPCM12}}
+\index{rPCM12@{rPCM12}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rPCM12}{rPCM12}}
+{\footnotesize\ttfamily \#define r\+P\+C\+M12~\mbox{\hyperlink{gb_2hardware_8h_a428894ca3fd0bb4527b03bed551ff04c}{P\+C\+M12\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac1c402357ccc5f6c3c451450b30ca959}\label{gb_2hardware_8h_ac1c402357ccc5f6c3c451450b30ca959}}
+\index{hardware.h@{hardware.h}!rPCM34@{rPCM34}}
+\index{rPCM34@{rPCM34}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rPCM34}{rPCM34}}
+{\footnotesize\ttfamily \#define r\+P\+C\+M34~\mbox{\hyperlink{gb_2hardware_8h_ac6d19ac313a99f41bd996e1ca5e43df0}{P\+C\+M34\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a52e850e75483f64ca070a33ee4877d47}\label{gb_2hardware_8h_a52e850e75483f64ca070a33ee4877d47}}
+\index{hardware.h@{hardware.h}!rIE@{rIE}}
+\index{rIE@{rIE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rIE}{rIE}}
+{\footnotesize\ttfamily \#define r\+IE~\mbox{\hyperlink{gb_2hardware_8h_aaef0dc6aab2f821ab406fdbc643af48e}{I\+E\+\_\+\+R\+EG}}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa7ce989df75547f190d33cc85dce0187}\label{gb_2hardware_8h_aa7ce989df75547f190d33cc85dce0187}}
+\index{hardware.h@{hardware.h}!IEF\_HILO@{IEF\_HILO}}
+\index{IEF\_HILO@{IEF\_HILO}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IEF\_HILO}{IEF\_HILO}}
+{\footnotesize\ttfamily \#define I\+E\+F\+\_\+\+H\+I\+LO~0b00010000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a921bdc6c640b74c8c41e65f27882c68a}\label{gb_2hardware_8h_a921bdc6c640b74c8c41e65f27882c68a}}
+\index{hardware.h@{hardware.h}!IEF\_SERIAL@{IEF\_SERIAL}}
+\index{IEF\_SERIAL@{IEF\_SERIAL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IEF\_SERIAL}{IEF\_SERIAL}}
+{\footnotesize\ttfamily \#define I\+E\+F\+\_\+\+S\+E\+R\+I\+AL~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7c06fa33152a235baf273f1828dfa0a4}\label{gb_2hardware_8h_a7c06fa33152a235baf273f1828dfa0a4}}
+\index{hardware.h@{hardware.h}!IEF\_TIMER@{IEF\_TIMER}}
+\index{IEF\_TIMER@{IEF\_TIMER}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IEF\_TIMER}{IEF\_TIMER}}
+{\footnotesize\ttfamily \#define I\+E\+F\+\_\+\+T\+I\+M\+ER~0b00000100}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a2eec77ca1b8730b410a7075c5a9c189e}\label{gb_2hardware_8h_a2eec77ca1b8730b410a7075c5a9c189e}}
+\index{hardware.h@{hardware.h}!IEF\_STAT@{IEF\_STAT}}
+\index{IEF\_STAT@{IEF\_STAT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IEF\_STAT}{IEF\_STAT}}
+{\footnotesize\ttfamily \#define I\+E\+F\+\_\+\+S\+T\+AT~0b00000010}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a3b8d7fece663511d5778136a5ca0070b}\label{gb_2hardware_8h_a3b8d7fece663511d5778136a5ca0070b}}
+\index{hardware.h@{hardware.h}!IEF\_VBLANK@{IEF\_VBLANK}}
+\index{IEF\_VBLANK@{IEF\_VBLANK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IEF\_VBLANK}{IEF\_VBLANK}}
+{\footnotesize\ttfamily \#define I\+E\+F\+\_\+\+V\+B\+L\+A\+NK~0b00000001}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a8a88b504914eed6c0c4d2853689487ba}\label{gb_2hardware_8h_a8a88b504914eed6c0c4d2853689487ba}}
+\index{hardware.h@{hardware.h}!AUDLEN\_DUTY\_12\_5@{AUDLEN\_DUTY\_12\_5}}
+\index{AUDLEN\_DUTY\_12\_5@{AUDLEN\_DUTY\_12\_5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDLEN\_DUTY\_12\_5}{AUDLEN\_DUTY\_12\_5}}
+{\footnotesize\ttfamily \#define A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+12\+\_\+5~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a52e58c151c5910792e75f7eea7f7ddbb}\label{gb_2hardware_8h_a52e58c151c5910792e75f7eea7f7ddbb}}
+\index{hardware.h@{hardware.h}!AUDLEN\_DUTY\_25@{AUDLEN\_DUTY\_25}}
+\index{AUDLEN\_DUTY\_25@{AUDLEN\_DUTY\_25}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDLEN\_DUTY\_25}{AUDLEN\_DUTY\_25}}
+{\footnotesize\ttfamily \#define A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+25~0b01000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_abd862604a105aa2475223b06abfa8bfe}\label{gb_2hardware_8h_abd862604a105aa2475223b06abfa8bfe}}
+\index{hardware.h@{hardware.h}!AUDLEN\_DUTY\_50@{AUDLEN\_DUTY\_50}}
+\index{AUDLEN\_DUTY\_50@{AUDLEN\_DUTY\_50}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDLEN\_DUTY\_50}{AUDLEN\_DUTY\_50}}
+{\footnotesize\ttfamily \#define A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+50~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a194e3432f1e4d5d23d4ea096cef783e5}\label{gb_2hardware_8h_a194e3432f1e4d5d23d4ea096cef783e5}}
+\index{hardware.h@{hardware.h}!AUDLEN\_DUTY\_75@{AUDLEN\_DUTY\_75}}
+\index{AUDLEN\_DUTY\_75@{AUDLEN\_DUTY\_75}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDLEN\_DUTY\_75}{AUDLEN\_DUTY\_75}}
+{\footnotesize\ttfamily \#define A\+U\+D\+L\+E\+N\+\_\+\+D\+U\+T\+Y\+\_\+75~0b11000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a367f10d1cfcc04fdbfcb88f09b230bd3}\label{gb_2hardware_8h_a367f10d1cfcc04fdbfcb88f09b230bd3}}
+\index{hardware.h@{hardware.h}!AUDLEN\_LENGTH@{AUDLEN\_LENGTH}}
+\index{AUDLEN\_LENGTH@{AUDLEN\_LENGTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDLEN\_LENGTH}{AUDLEN\_LENGTH}}
+{\footnotesize\ttfamily \#define A\+U\+D\+L\+E\+N\+\_\+\+L\+E\+N\+G\+TH(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~(x)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7dab7d2ad1bf670875814d3029d54122}\label{gb_2hardware_8h_a7dab7d2ad1bf670875814d3029d54122}}
+\index{hardware.h@{hardware.h}!AUDENV\_VOL@{AUDENV\_VOL}}
+\index{AUDENV\_VOL@{AUDENV\_VOL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENV\_VOL}{AUDENV\_VOL}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+V\+\_\+\+V\+OL(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~((x) $<$$<$ 4)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a9f069f19e8a05d1f1114aaabf531739e}\label{gb_2hardware_8h_a9f069f19e8a05d1f1114aaabf531739e}}
+\index{hardware.h@{hardware.h}!AUDENV\_UP@{AUDENV\_UP}}
+\index{AUDENV\_UP@{AUDENV\_UP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENV\_UP}{AUDENV\_UP}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+V\+\_\+\+UP~0b00001000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_aa58f52563d21d56e79d422c544eeb13f}\label{gb_2hardware_8h_aa58f52563d21d56e79d422c544eeb13f}}
+\index{hardware.h@{hardware.h}!AUDENV\_DOWN@{AUDENV\_DOWN}}
+\index{AUDENV\_DOWN@{AUDENV\_DOWN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENV\_DOWN}{AUDENV\_DOWN}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+V\+\_\+\+D\+O\+WN~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ad07fa5e19e334eee03c2fcb8671b2ed3}\label{gb_2hardware_8h_ad07fa5e19e334eee03c2fcb8671b2ed3}}
+\index{hardware.h@{hardware.h}!AUDENV\_LENGTH@{AUDENV\_LENGTH}}
+\index{AUDENV\_LENGTH@{AUDENV\_LENGTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDENV\_LENGTH}{AUDENV\_LENGTH}}
+{\footnotesize\ttfamily \#define A\+U\+D\+E\+N\+V\+\_\+\+L\+E\+N\+G\+TH(\begin{DoxyParamCaption}\item[{}]{x }\end{DoxyParamCaption})~(x)}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a6d820a86bd30b531d5df5b27139ae92d}\label{gb_2hardware_8h_a6d820a86bd30b531d5df5b27139ae92d}}
+\index{hardware.h@{hardware.h}!AUDHIGH\_RESTART@{AUDHIGH\_RESTART}}
+\index{AUDHIGH\_RESTART@{AUDHIGH\_RESTART}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDHIGH\_RESTART}{AUDHIGH\_RESTART}}
+{\footnotesize\ttfamily \#define A\+U\+D\+H\+I\+G\+H\+\_\+\+R\+E\+S\+T\+A\+RT~0b10000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ab3325578cf7f7f67610353a62aba274e}\label{gb_2hardware_8h_ab3325578cf7f7f67610353a62aba274e}}
+\index{hardware.h@{hardware.h}!AUDHIGH\_LENGTH\_ON@{AUDHIGH\_LENGTH\_ON}}
+\index{AUDHIGH\_LENGTH\_ON@{AUDHIGH\_LENGTH\_ON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDHIGH\_LENGTH\_ON}{AUDHIGH\_LENGTH\_ON}}
+{\footnotesize\ttfamily \#define A\+U\+D\+H\+I\+G\+H\+\_\+\+L\+E\+N\+G\+T\+H\+\_\+\+ON~0b01000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_afe4927e6bc7efa57461e3c3b84d242da}\label{gb_2hardware_8h_afe4927e6bc7efa57461e3c3b84d242da}}
+\index{hardware.h@{hardware.h}!AUDHIGH\_LENGTH\_OFF@{AUDHIGH\_LENGTH\_OFF}}
+\index{AUDHIGH\_LENGTH\_OFF@{AUDHIGH\_LENGTH\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUDHIGH\_LENGTH\_OFF}{AUDHIGH\_LENGTH\_OFF}}
+{\footnotesize\ttfamily \#define A\+U\+D\+H\+I\+G\+H\+\_\+\+L\+E\+N\+G\+T\+H\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a393866ca405b1023eec0e784bb88b026}\label{gb_2hardware_8h_a393866ca405b1023eec0e784bb88b026}}
+\index{hardware.h@{hardware.h}!OAMF\_PRI@{OAMF\_PRI}}
+\index{OAMF\_PRI@{OAMF\_PRI}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_PRI}{OAMF\_PRI}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+P\+RI~0b10000000}
+
+BG and Window over Sprite Enabled \mbox{\Hypertarget{gb_2hardware_8h_a820677d593625e8716c3b78f36feb805}\label{gb_2hardware_8h_a820677d593625e8716c3b78f36feb805}}
+\index{hardware.h@{hardware.h}!OAMF\_YFLIP@{OAMF\_YFLIP}}
+\index{OAMF\_YFLIP@{OAMF\_YFLIP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_YFLIP}{OAMF\_YFLIP}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+Y\+F\+L\+IP~0b01000000}
+
+Sprite Y axis flip\+: Vertically mirrored \mbox{\Hypertarget{gb_2hardware_8h_a3cd1c1a1291d43dd43b181ff07f8b0a7}\label{gb_2hardware_8h_a3cd1c1a1291d43dd43b181ff07f8b0a7}}
+\index{hardware.h@{hardware.h}!OAMF\_XFLIP@{OAMF\_XFLIP}}
+\index{OAMF\_XFLIP@{OAMF\_XFLIP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_XFLIP}{OAMF\_XFLIP}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+X\+F\+L\+IP~0b00100000}
+
+Sprite X axis flip\+: Horizontally mirrored \mbox{\Hypertarget{gb_2hardware_8h_a22b6b835de9ee737be73c4d252aac87c}\label{gb_2hardware_8h_a22b6b835de9ee737be73c4d252aac87c}}
+\index{hardware.h@{hardware.h}!OAMF\_PAL0@{OAMF\_PAL0}}
+\index{OAMF\_PAL0@{OAMF\_PAL0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_PAL0}{OAMF\_PAL0}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+P\+A\+L0~0b00000000}
+
+Sprite Palette number\+: use O\+B\+P0 (Non-\/\+C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_ad92f3b2a1cc16700a4660c5821bcb15d}\label{gb_2hardware_8h_ad92f3b2a1cc16700a4660c5821bcb15d}}
+\index{hardware.h@{hardware.h}!OAMF\_PAL1@{OAMF\_PAL1}}
+\index{OAMF\_PAL1@{OAMF\_PAL1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_PAL1}{OAMF\_PAL1}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+P\+A\+L1~0b00010000}
+
+Sprite Palette number\+: use O\+B\+P1 (Non-\/\+C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_aade9a193ade9ff22ed6f6263d1a3549b}\label{gb_2hardware_8h_aade9a193ade9ff22ed6f6263d1a3549b}}
+\index{hardware.h@{hardware.h}!OAMF\_BANK0@{OAMF\_BANK0}}
+\index{OAMF\_BANK0@{OAMF\_BANK0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_BANK0}{OAMF\_BANK0}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+B\+A\+N\+K0~0b00000000}
+
+Sprite Tile V\+R\+A\+M-\/\+Bank\+: Use Bank 0 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_ad195d4be68ff54c3926c431fa5511de5}\label{gb_2hardware_8h_ad195d4be68ff54c3926c431fa5511de5}}
+\index{hardware.h@{hardware.h}!OAMF\_BANK1@{OAMF\_BANK1}}
+\index{OAMF\_BANK1@{OAMF\_BANK1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_BANK1}{OAMF\_BANK1}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+B\+A\+N\+K1~0b00001000}
+
+Sprite Tile V\+R\+A\+M-\/\+Bank\+: Use Bank 1 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a4ff8c8a7acb74ba54043596110091605}\label{gb_2hardware_8h_a4ff8c8a7acb74ba54043596110091605}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL0@{OAMF\_CGB\_PAL0}}
+\index{OAMF\_CGB\_PAL0@{OAMF\_CGB\_PAL0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL0}{OAMF\_CGB\_PAL0}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L0~0b00000000}
+
+Sprite C\+GB Palette number\+: use O\+C\+P0 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a9dff52d03755812d3a5ee7ca971c2e83}\label{gb_2hardware_8h_a9dff52d03755812d3a5ee7ca971c2e83}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL1@{OAMF\_CGB\_PAL1}}
+\index{OAMF\_CGB\_PAL1@{OAMF\_CGB\_PAL1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL1}{OAMF\_CGB\_PAL1}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L1~0b00000001}
+
+Sprite C\+GB Palette number\+: use O\+C\+P1 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a74744fb475532fa5d343e0818dcc6f88}\label{gb_2hardware_8h_a74744fb475532fa5d343e0818dcc6f88}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL2@{OAMF\_CGB\_PAL2}}
+\index{OAMF\_CGB\_PAL2@{OAMF\_CGB\_PAL2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL2}{OAMF\_CGB\_PAL2}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L2~0b00000010}
+
+Sprite C\+GB Palette number\+: use O\+C\+P2 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a704ab20694793ea87aace8bfc29568bc}\label{gb_2hardware_8h_a704ab20694793ea87aace8bfc29568bc}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL3@{OAMF\_CGB\_PAL3}}
+\index{OAMF\_CGB\_PAL3@{OAMF\_CGB\_PAL3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL3}{OAMF\_CGB\_PAL3}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L3~0b00000011}
+
+Sprite C\+GB Palette number\+: use O\+C\+P3 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a13d5cddfb4a05fa49fc794aeea675c7b}\label{gb_2hardware_8h_a13d5cddfb4a05fa49fc794aeea675c7b}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL4@{OAMF\_CGB\_PAL4}}
+\index{OAMF\_CGB\_PAL4@{OAMF\_CGB\_PAL4}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL4}{OAMF\_CGB\_PAL4}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L4~0b00000100}
+
+Sprite C\+GB Palette number\+: use O\+C\+P4 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_af9284c71b8ebf10ef8b9e12268f2cce3}\label{gb_2hardware_8h_af9284c71b8ebf10ef8b9e12268f2cce3}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL5@{OAMF\_CGB\_PAL5}}
+\index{OAMF\_CGB\_PAL5@{OAMF\_CGB\_PAL5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL5}{OAMF\_CGB\_PAL5}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L5~0b00000101}
+
+Sprite C\+GB Palette number\+: use O\+C\+P5 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_ad6f5b0d9ae958dee3d6dfa8f4273ff5a}\label{gb_2hardware_8h_ad6f5b0d9ae958dee3d6dfa8f4273ff5a}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL6@{OAMF\_CGB\_PAL6}}
+\index{OAMF\_CGB\_PAL6@{OAMF\_CGB\_PAL6}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL6}{OAMF\_CGB\_PAL6}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L6~0b00000110}
+
+Sprite C\+GB Palette number\+: use O\+C\+P6 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_af4b27e8f3c3e14a4f91051fea4c64e4b}\label{gb_2hardware_8h_af4b27e8f3c3e14a4f91051fea4c64e4b}}
+\index{hardware.h@{hardware.h}!OAMF\_CGB\_PAL7@{OAMF\_CGB\_PAL7}}
+\index{OAMF\_CGB\_PAL7@{OAMF\_CGB\_PAL7}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_CGB\_PAL7}{OAMF\_CGB\_PAL7}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+C\+G\+B\+\_\+\+P\+A\+L7~0b00000111}
+
+Sprite C\+GB Palette number\+: use O\+C\+P7 (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a5dc4d1ee47fe269761fe8fc46d56dabb}\label{gb_2hardware_8h_a5dc4d1ee47fe269761fe8fc46d56dabb}}
+\index{hardware.h@{hardware.h}!OAMF\_PALMASK@{OAMF\_PALMASK}}
+\index{OAMF\_PALMASK@{OAMF\_PALMASK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OAMF\_PALMASK}{OAMF\_PALMASK}}
+{\footnotesize\ttfamily \#define O\+A\+M\+F\+\_\+\+P\+A\+L\+M\+A\+SK~0b00000111}
+
+Mask for Sprite C\+GB Palette number (C\+GB Mode Only) \mbox{\Hypertarget{gb_2hardware_8h_a519e327cac96f68a8ca9b77e0343672f}\label{gb_2hardware_8h_a519e327cac96f68a8ca9b77e0343672f}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_X\_OFFSET@{DEVICE\_SCREEN\_X\_OFFSET}}
+\index{DEVICE\_SCREEN\_X\_OFFSET@{DEVICE\_SCREEN\_X\_OFFSET}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_X\_OFFSET}{DEVICE\_SCREEN\_X\_OFFSET}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+X\+\_\+\+O\+F\+F\+S\+ET~0}
+
+Offset of visible screen (in tile units) from left edge of hardware map \mbox{\Hypertarget{gb_2hardware_8h_af334c0e7dd6e434b3dbebd45bcdeb75a}\label{gb_2hardware_8h_af334c0e7dd6e434b3dbebd45bcdeb75a}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_Y\_OFFSET@{DEVICE\_SCREEN\_Y\_OFFSET}}
+\index{DEVICE\_SCREEN\_Y\_OFFSET@{DEVICE\_SCREEN\_Y\_OFFSET}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_Y\_OFFSET}{DEVICE\_SCREEN\_Y\_OFFSET}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+Y\+\_\+\+O\+F\+F\+S\+ET~0}
+
+Offset of visible screen (in tile units) from top edge of hardware map \mbox{\Hypertarget{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}\label{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_WIDTH@{DEVICE\_SCREEN\_WIDTH}}
+\index{DEVICE\_SCREEN\_WIDTH@{DEVICE\_SCREEN\_WIDTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_WIDTH}{DEVICE\_SCREEN\_WIDTH}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH~20}
+
+Width of visible screen in tile units \mbox{\Hypertarget{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}\label{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_HEIGHT@{DEVICE\_SCREEN\_HEIGHT}}
+\index{DEVICE\_SCREEN\_HEIGHT@{DEVICE\_SCREEN\_HEIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_HEIGHT}{DEVICE\_SCREEN\_HEIGHT}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT~18}
+
+Height of visible screen in tile units \mbox{\Hypertarget{gb_2hardware_8h_a491dc081eae8c81e7ca88075ab806291}\label{gb_2hardware_8h_a491dc081eae8c81e7ca88075ab806291}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_BUFFER\_WIDTH@{DEVICE\_SCREEN\_BUFFER\_WIDTH}}
+\index{DEVICE\_SCREEN\_BUFFER\_WIDTH@{DEVICE\_SCREEN\_BUFFER\_WIDTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_BUFFER\_WIDTH}{DEVICE\_SCREEN\_BUFFER\_WIDTH}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+W\+I\+D\+TH~32}
+
+Width of hardware map buffer in tile units \mbox{\Hypertarget{gb_2hardware_8h_a81fb56b6778772f829dab4c534e7749e}\label{gb_2hardware_8h_a81fb56b6778772f829dab4c534e7749e}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_BUFFER\_HEIGHT@{DEVICE\_SCREEN\_BUFFER\_HEIGHT}}
+\index{DEVICE\_SCREEN\_BUFFER\_HEIGHT@{DEVICE\_SCREEN\_BUFFER\_HEIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_BUFFER\_HEIGHT}{DEVICE\_SCREEN\_BUFFER\_HEIGHT}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+B\+U\+F\+F\+E\+R\+\_\+\+H\+E\+I\+G\+HT~32}
+
+Height of hardware map buffer in tile units \mbox{\Hypertarget{gb_2hardware_8h_a4d682ed7a6158c5ba10afec739b17a8a}\label{gb_2hardware_8h_a4d682ed7a6158c5ba10afec739b17a8a}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE@{DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE}}
+\index{DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE@{DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE}{DEVICE\_SCREEN\_MAP\_ENTRY\_SIZE}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+M\+A\+P\+\_\+\+E\+N\+T\+R\+Y\+\_\+\+S\+I\+ZE~1}
+
+Number of bytes per hardware map entry \mbox{\Hypertarget{gb_2hardware_8h_af531e7ac0c0a58517fa3061631745c31}\label{gb_2hardware_8h_af531e7ac0c0a58517fa3061631745c31}}
+\index{hardware.h@{hardware.h}!DEVICE\_SPRITE\_PX\_OFFSET\_X@{DEVICE\_SPRITE\_PX\_OFFSET\_X}}
+\index{DEVICE\_SPRITE\_PX\_OFFSET\_X@{DEVICE\_SPRITE\_PX\_OFFSET\_X}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SPRITE\_PX\_OFFSET\_X}{DEVICE\_SPRITE\_PX\_OFFSET\_X}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+X~8}
+
+Offset of sprite X coordinate origin (in pixels) from left edge of visible screen \mbox{\Hypertarget{gb_2hardware_8h_a7f6c8420831388300bbec13ea4cb57a0}\label{gb_2hardware_8h_a7f6c8420831388300bbec13ea4cb57a0}}
+\index{hardware.h@{hardware.h}!DEVICE\_SPRITE\_PX\_OFFSET\_Y@{DEVICE\_SPRITE\_PX\_OFFSET\_Y}}
+\index{DEVICE\_SPRITE\_PX\_OFFSET\_Y@{DEVICE\_SPRITE\_PX\_OFFSET\_Y}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SPRITE\_PX\_OFFSET\_Y}{DEVICE\_SPRITE\_PX\_OFFSET\_Y}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+P\+R\+I\+T\+E\+\_\+\+P\+X\+\_\+\+O\+F\+F\+S\+E\+T\+\_\+Y~16}
+
+Offset of sprite Y coordinate origin (in pixels) from top edge of visible screen \mbox{\Hypertarget{gb_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}\label{gb_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_PX\_WIDTH@{DEVICE\_SCREEN\_PX\_WIDTH}}
+\index{DEVICE\_SCREEN\_PX\_WIDTH@{DEVICE\_SCREEN\_PX\_WIDTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_PX\_WIDTH}{DEVICE\_SCREEN\_PX\_WIDTH}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH~(\mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}} $\ast$ 8)}
+
+Width of visible screen in pixels \mbox{\Hypertarget{gb_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}\label{gb_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_PX\_HEIGHT@{DEVICE\_SCREEN\_PX\_HEIGHT}}
+\index{DEVICE\_SCREEN\_PX\_HEIGHT@{DEVICE\_SCREEN\_PX\_HEIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_PX\_HEIGHT}{DEVICE\_SCREEN\_PX\_HEIGHT}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT~(\mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}} $\ast$ 8)}
+
+Height of visible screen in pixels
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{gb_2hardware_8h_aea9200b29be90b58417787720cdf750b}\label{gb_2hardware_8h_aea9200b29be90b58417787720cdf750b}}
+\index{hardware.h@{hardware.h}!\_VRAM@{\_VRAM}}
+\index{\_VRAM@{\_VRAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_VRAM}{\_VRAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+V\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+Memoty map \mbox{\Hypertarget{gb_2hardware_8h_a73c94166161c33c61d63b3e4b5209cd0}\label{gb_2hardware_8h_a73c94166161c33c61d63b3e4b5209cd0}}
+\index{hardware.h@{hardware.h}!\_VRAM8000@{\_VRAM8000}}
+\index{\_VRAM8000@{\_VRAM8000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_VRAM8000}{\_VRAM8000}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+V\+R\+A\+M8000\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_af763563b6123ef29d73931f616969049}\label{gb_2hardware_8h_af763563b6123ef29d73931f616969049}}
+\index{hardware.h@{hardware.h}!\_VRAM8800@{\_VRAM8800}}
+\index{\_VRAM8800@{\_VRAM8800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_VRAM8800}{\_VRAM8800}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+V\+R\+A\+M8800\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a668fd555c203361f5e4b835f05243102}\label{gb_2hardware_8h_a668fd555c203361f5e4b835f05243102}}
+\index{hardware.h@{hardware.h}!\_VRAM9000@{\_VRAM9000}}
+\index{\_VRAM9000@{\_VRAM9000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_VRAM9000}{\_VRAM9000}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+V\+R\+A\+M9000\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac5b9d1761bb972948fe10637dfaa94a7}\label{gb_2hardware_8h_ac5b9d1761bb972948fe10637dfaa94a7}}
+\index{hardware.h@{hardware.h}!\_SCRN0@{\_SCRN0}}
+\index{\_SCRN0@{\_SCRN0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_SCRN0}{\_SCRN0}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+S\+C\+R\+N0\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_afff31f511127bf7ba1bd3b6bc740aee8}\label{gb_2hardware_8h_afff31f511127bf7ba1bd3b6bc740aee8}}
+\index{hardware.h@{hardware.h}!\_SCRN1@{\_SCRN1}}
+\index{\_SCRN1@{\_SCRN1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_SCRN1}{\_SCRN1}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+S\+C\+R\+N1\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a09a4ae65605182c8b694197d3aea695e}\label{gb_2hardware_8h_a09a4ae65605182c8b694197d3aea695e}}
+\index{hardware.h@{hardware.h}!\_SRAM@{\_SRAM}}
+\index{\_SRAM@{\_SRAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_SRAM}{\_SRAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+S\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac1cf31cae6046360271ead6e8b7a6e87}\label{gb_2hardware_8h_ac1cf31cae6046360271ead6e8b7a6e87}}
+\index{hardware.h@{hardware.h}!\_RAM@{\_RAM}}
+\index{\_RAM@{\_RAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_RAM}{\_RAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a2f83a5f5daa6418c77756e32923aef5a}\label{gb_2hardware_8h_a2f83a5f5daa6418c77756e32923aef5a}}
+\index{hardware.h@{hardware.h}!\_RAMBANK@{\_RAMBANK}}
+\index{\_RAMBANK@{\_RAMBANK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_RAMBANK}{\_RAMBANK}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+R\+A\+M\+B\+A\+NK\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a7030908728e166877fba9065671deb02}\label{gb_2hardware_8h_a7030908728e166877fba9065671deb02}}
+\index{hardware.h@{hardware.h}!\_OAMRAM@{\_OAMRAM}}
+\index{\_OAMRAM@{\_OAMRAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_OAMRAM}{\_OAMRAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}} \+\_\+\+O\+A\+M\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a134e3f274c1e607b8c5ff5724860e288}\label{gb_2hardware_8h_a134e3f274c1e607b8c5ff5724860e288}}
+\index{hardware.h@{hardware.h}!\_IO@{\_IO}}
+\index{\_IO@{\_IO}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_IO}{\_IO}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \+\_\+\+IO\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a70db64bdd045a9df09b289fe9b28af22}\label{gb_2hardware_8h_a70db64bdd045a9df09b289fe9b28af22}}
+\index{hardware.h@{hardware.h}!\_AUD3WAVERAM@{\_AUD3WAVERAM}}
+\index{\_AUD3WAVERAM@{\_AUD3WAVERAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_AUD3WAVERAM}{\_AUD3WAVERAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \+\_\+\+A\+U\+D3\+W\+A\+V\+E\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a472e3b0909a2f0878f643e9968b871ef}\label{gb_2hardware_8h_a472e3b0909a2f0878f643e9968b871ef}}
+\index{hardware.h@{hardware.h}!\_HRAM@{\_HRAM}}
+\index{\_HRAM@{\_HRAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_HRAM}{\_HRAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} \+\_\+\+H\+R\+AM\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a64dd59016e4f0e78672962fbc553a4b4}\label{gb_2hardware_8h_a64dd59016e4f0e78672962fbc553a4b4}}
+\index{hardware.h@{hardware.h}!rRAMG@{rRAMG}}
+\index{rRAMG@{rRAMG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rRAMG}{rRAMG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} r\+R\+A\+MG}
+
+M\+B\+C5 registers \mbox{\Hypertarget{gb_2hardware_8h_ae0976a29e341edc6ceb810e6eb0328f1}\label{gb_2hardware_8h_ae0976a29e341edc6ceb810e6eb0328f1}}
+\index{hardware.h@{hardware.h}!rROMB0@{rROMB0}}
+\index{rROMB0@{rROMB0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rROMB0}{rROMB0}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} r\+R\+O\+M\+B0}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a014f3a9d7ce8f8026c9ac6c0410bb099}\label{gb_2hardware_8h_a014f3a9d7ce8f8026c9ac6c0410bb099}}
+\index{hardware.h@{hardware.h}!rROMB1@{rROMB1}}
+\index{rROMB1@{rROMB1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rROMB1}{rROMB1}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} r\+R\+O\+M\+B1}
+
+\mbox{\Hypertarget{gb_2hardware_8h_ac2985dbccb16c4c00381d6fbe9600aff}\label{gb_2hardware_8h_ac2985dbccb16c4c00381d6fbe9600aff}}
+\index{hardware.h@{hardware.h}!rRAMB@{rRAMB}}
+\index{rRAMB@{rRAMB}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{rRAMB}{rRAMB}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} r\+R\+A\+MB}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a04f9a36ab04334fcd21d2f50c125d5d0}\label{gb_2hardware_8h_a04f9a36ab04334fcd21d2f50c125d5d0}}
+\index{hardware.h@{hardware.h}!P1\_REG@{P1\_REG}}
+\index{P1\_REG@{P1\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{P1\_REG}{P1\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} P1\+\_\+\+R\+EG}
+
+IO Registers Joystick\+: 1.\+1.\+P15.\+P14.\+P13.\+P12.\+P11.\+P10 \mbox{\Hypertarget{gb_2hardware_8h_a5f2da0d8200f44b6fd694c4a2bea820e}\label{gb_2hardware_8h_a5f2da0d8200f44b6fd694c4a2bea820e}}
+\index{hardware.h@{hardware.h}!SB\_REG@{SB\_REG}}
+\index{SB\_REG@{SB\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SB\_REG}{SB\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+B\+\_\+\+R\+EG}
+
+Serial IO data buffer \mbox{\Hypertarget{gb_2hardware_8h_a0fb715973ee3edd1b525eb7f503e3b2a}\label{gb_2hardware_8h_a0fb715973ee3edd1b525eb7f503e3b2a}}
+\index{hardware.h@{hardware.h}!SC\_REG@{SC\_REG}}
+\index{SC\_REG@{SC\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SC\_REG}{SC\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+C\+\_\+\+R\+EG}
+
+Serial IO control register \mbox{\Hypertarget{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}\label{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}}
+\index{hardware.h@{hardware.h}!DIV\_REG@{DIV\_REG}}
+\index{DIV\_REG@{DIV\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DIV\_REG}{DIV\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} D\+I\+V\+\_\+\+R\+EG}
+
+Divider register \mbox{\Hypertarget{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}\label{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}}
+\index{hardware.h@{hardware.h}!TIMA\_REG@{TIMA\_REG}}
+\index{TIMA\_REG@{TIMA\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TIMA\_REG}{TIMA\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} T\+I\+M\+A\+\_\+\+R\+EG}
+
+Timer counter \mbox{\Hypertarget{gb_2hardware_8h_a39e5a5b9afd2c2ca78de4aba7ccd071c}\label{gb_2hardware_8h_a39e5a5b9afd2c2ca78de4aba7ccd071c}}
+\index{hardware.h@{hardware.h}!TMA\_REG@{TMA\_REG}}
+\index{TMA\_REG@{TMA\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TMA\_REG}{TMA\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} T\+M\+A\+\_\+\+R\+EG}
+
+Timer modulo \mbox{\Hypertarget{gb_2hardware_8h_a659173ac2c8da7fd04bc77973eb95256}\label{gb_2hardware_8h_a659173ac2c8da7fd04bc77973eb95256}}
+\index{hardware.h@{hardware.h}!TAC\_REG@{TAC\_REG}}
+\index{TAC\_REG@{TAC\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{TAC\_REG}{TAC\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} T\+A\+C\+\_\+\+R\+EG}
+
+Timer control \mbox{\Hypertarget{gb_2hardware_8h_a509a5d0f138b40830cb447a862573be5}\label{gb_2hardware_8h_a509a5d0f138b40830cb447a862573be5}}
+\index{hardware.h@{hardware.h}!IF\_REG@{IF\_REG}}
+\index{IF\_REG@{IF\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IF\_REG}{IF\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} I\+F\+\_\+\+R\+EG}
+
+Interrupt flags\+: 0.\+0.\+0.\+J\+O\+Y.\+S\+I\+O.\+T\+I\+M.\+L\+C\+D.\+V\+BL \mbox{\Hypertarget{gb_2hardware_8h_ad859dc62b1df1584ade0cbb822a3e46f}\label{gb_2hardware_8h_ad859dc62b1df1584ade0cbb822a3e46f}}
+\index{hardware.h@{hardware.h}!NR10\_REG@{NR10\_REG}}
+\index{NR10\_REG@{NR10\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR10\_REG}{NR10\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R10\+\_\+\+R\+EG}
+
+Sound Channel 1 Sweep \mbox{\Hypertarget{gb_2hardware_8h_ad53dc7f22b99fce195210a95f2749a72}\label{gb_2hardware_8h_ad53dc7f22b99fce195210a95f2749a72}}
+\index{hardware.h@{hardware.h}!NR11\_REG@{NR11\_REG}}
+\index{NR11\_REG@{NR11\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR11\_REG}{NR11\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R11\+\_\+\+R\+EG}
+
+Sound Channel 1 Sound length/\+Wave pattern duty \mbox{\Hypertarget{gb_2hardware_8h_a7accf5feabd95a2d84c72f5915fff837}\label{gb_2hardware_8h_a7accf5feabd95a2d84c72f5915fff837}}
+\index{hardware.h@{hardware.h}!NR12\_REG@{NR12\_REG}}
+\index{NR12\_REG@{NR12\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR12\_REG}{NR12\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R12\+\_\+\+R\+EG}
+
+Sound Channel 1 Volume Envelope \mbox{\Hypertarget{gb_2hardware_8h_a3d30d4797321b403cd713d727fa3db6c}\label{gb_2hardware_8h_a3d30d4797321b403cd713d727fa3db6c}}
+\index{hardware.h@{hardware.h}!NR13\_REG@{NR13\_REG}}
+\index{NR13\_REG@{NR13\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR13\_REG}{NR13\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R13\+\_\+\+R\+EG}
+
+Sound Channel 1 Frequency Low \mbox{\Hypertarget{gb_2hardware_8h_a04c340d91842e8ee2b93922c2bcf39a4}\label{gb_2hardware_8h_a04c340d91842e8ee2b93922c2bcf39a4}}
+\index{hardware.h@{hardware.h}!NR14\_REG@{NR14\_REG}}
+\index{NR14\_REG@{NR14\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR14\_REG}{NR14\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R14\+\_\+\+R\+EG}
+
+Sound Channel 1 Frequency High \mbox{\Hypertarget{gb_2hardware_8h_a6dd3af1c8e3c66409aa0bc889d98e171}\label{gb_2hardware_8h_a6dd3af1c8e3c66409aa0bc889d98e171}}
+\index{hardware.h@{hardware.h}!NR21\_REG@{NR21\_REG}}
+\index{NR21\_REG@{NR21\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR21\_REG}{NR21\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R21\+\_\+\+R\+EG}
+
+Sound Channel 2 Tone \mbox{\Hypertarget{gb_2hardware_8h_af1301c73bf93350045ba3a4887723ae8}\label{gb_2hardware_8h_af1301c73bf93350045ba3a4887723ae8}}
+\index{hardware.h@{hardware.h}!NR22\_REG@{NR22\_REG}}
+\index{NR22\_REG@{NR22\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR22\_REG}{NR22\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R22\+\_\+\+R\+EG}
+
+Sound Channel 2 Volume Envelope \mbox{\Hypertarget{gb_2hardware_8h_a7bb32ac86e3fbf5f869410ba42620616}\label{gb_2hardware_8h_a7bb32ac86e3fbf5f869410ba42620616}}
+\index{hardware.h@{hardware.h}!NR23\_REG@{NR23\_REG}}
+\index{NR23\_REG@{NR23\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR23\_REG}{NR23\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R23\+\_\+\+R\+EG}
+
+Sound Channel 2 Frequency data Low \mbox{\Hypertarget{gb_2hardware_8h_a6676e579a5e421adfb3d3e2d470d9ab6}\label{gb_2hardware_8h_a6676e579a5e421adfb3d3e2d470d9ab6}}
+\index{hardware.h@{hardware.h}!NR24\_REG@{NR24\_REG}}
+\index{NR24\_REG@{NR24\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR24\_REG}{NR24\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R24\+\_\+\+R\+EG}
+
+Sound Channel 2 Frequency data High \mbox{\Hypertarget{gb_2hardware_8h_a85d8e680d4d40a918b4195d2a4fada2a}\label{gb_2hardware_8h_a85d8e680d4d40a918b4195d2a4fada2a}}
+\index{hardware.h@{hardware.h}!NR30\_REG@{NR30\_REG}}
+\index{NR30\_REG@{NR30\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR30\_REG}{NR30\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R30\+\_\+\+R\+EG}
+
+Sound Channel 3 Sound on/off \mbox{\Hypertarget{gb_2hardware_8h_aea78f857e34370d7e1177a8bafe08148}\label{gb_2hardware_8h_aea78f857e34370d7e1177a8bafe08148}}
+\index{hardware.h@{hardware.h}!NR31\_REG@{NR31\_REG}}
+\index{NR31\_REG@{NR31\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR31\_REG}{NR31\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R31\+\_\+\+R\+EG}
+
+Sound Channel 3 Sound Length \mbox{\Hypertarget{gb_2hardware_8h_a244ee6d8f6144be9b0f94602eddb6239}\label{gb_2hardware_8h_a244ee6d8f6144be9b0f94602eddb6239}}
+\index{hardware.h@{hardware.h}!NR32\_REG@{NR32\_REG}}
+\index{NR32\_REG@{NR32\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR32\_REG}{NR32\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R32\+\_\+\+R\+EG}
+
+Sound Channel 3 Select output level \mbox{\Hypertarget{gb_2hardware_8h_a01c768b60853c8eecdefc2cedfc8d672}\label{gb_2hardware_8h_a01c768b60853c8eecdefc2cedfc8d672}}
+\index{hardware.h@{hardware.h}!NR33\_REG@{NR33\_REG}}
+\index{NR33\_REG@{NR33\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR33\_REG}{NR33\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R33\+\_\+\+R\+EG}
+
+Sound Channel 3 Frequency data Low \mbox{\Hypertarget{gb_2hardware_8h_ab6da3e2cdbac1331bef3f6de9c808ab1}\label{gb_2hardware_8h_ab6da3e2cdbac1331bef3f6de9c808ab1}}
+\index{hardware.h@{hardware.h}!NR34\_REG@{NR34\_REG}}
+\index{NR34\_REG@{NR34\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR34\_REG}{NR34\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R34\+\_\+\+R\+EG}
+
+Sound Channel 3 Frequency data High \mbox{\Hypertarget{gb_2hardware_8h_a557833cc1671aa0bd71f33766b4e0f24}\label{gb_2hardware_8h_a557833cc1671aa0bd71f33766b4e0f24}}
+\index{hardware.h@{hardware.h}!NR41\_REG@{NR41\_REG}}
+\index{NR41\_REG@{NR41\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR41\_REG}{NR41\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R41\+\_\+\+R\+EG}
+
+Sound Channel 4 Sound Length \mbox{\Hypertarget{gb_2hardware_8h_aba3d9fb63552bc02ec879696b581adac}\label{gb_2hardware_8h_aba3d9fb63552bc02ec879696b581adac}}
+\index{hardware.h@{hardware.h}!NR42\_REG@{NR42\_REG}}
+\index{NR42\_REG@{NR42\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR42\_REG}{NR42\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R42\+\_\+\+R\+EG}
+
+Sound Channel 4 Volume Envelope \mbox{\Hypertarget{gb_2hardware_8h_a52593a64863d51fbf5860b0d31448972}\label{gb_2hardware_8h_a52593a64863d51fbf5860b0d31448972}}
+\index{hardware.h@{hardware.h}!NR43\_REG@{NR43\_REG}}
+\index{NR43\_REG@{NR43\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR43\_REG}{NR43\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R43\+\_\+\+R\+EG}
+
+Sound Channel 4 Polynomial Counter \mbox{\Hypertarget{gb_2hardware_8h_a849d2cff8df2655f86b294466bec40d6}\label{gb_2hardware_8h_a849d2cff8df2655f86b294466bec40d6}}
+\index{hardware.h@{hardware.h}!NR44\_REG@{NR44\_REG}}
+\index{NR44\_REG@{NR44\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR44\_REG}{NR44\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R44\+\_\+\+R\+EG}
+
+Sound Channel 4 Counter / Consecutive and Inital ~\newline
+ \mbox{\Hypertarget{gb_2hardware_8h_a924fdf48f6ad020423f6309055314928}\label{gb_2hardware_8h_a924fdf48f6ad020423f6309055314928}}
+\index{hardware.h@{hardware.h}!NR50\_REG@{NR50\_REG}}
+\index{NR50\_REG@{NR50\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR50\_REG}{NR50\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R50\+\_\+\+R\+EG}
+
+Sound Channel control / O\+N-\/\+O\+FF / Volume \mbox{\Hypertarget{gb_2hardware_8h_ab28f97eabd5f32d48ea27d97bd5dc64f}\label{gb_2hardware_8h_ab28f97eabd5f32d48ea27d97bd5dc64f}}
+\index{hardware.h@{hardware.h}!NR51\_REG@{NR51\_REG}}
+\index{NR51\_REG@{NR51\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR51\_REG}{NR51\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R51\+\_\+\+R\+EG}
+
+Sound Selection of Sound output terminal \mbox{\Hypertarget{gb_2hardware_8h_ac429365dce851ca57d8fe4f7c54a1caa}\label{gb_2hardware_8h_ac429365dce851ca57d8fe4f7c54a1caa}}
+\index{hardware.h@{hardware.h}!NR52\_REG@{NR52\_REG}}
+\index{NR52\_REG@{NR52\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{NR52\_REG}{NR52\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} N\+R52\+\_\+\+R\+EG}
+
+Sound Master on/off \mbox{\Hypertarget{gb_2hardware_8h_a2fe41a6e0abb211cc00a8fca90543966}\label{gb_2hardware_8h_a2fe41a6e0abb211cc00a8fca90543966}}
+\index{hardware.h@{hardware.h}!AUD3WAVE@{AUD3WAVE}}
+\index{AUD3WAVE@{AUD3WAVE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{AUD3WAVE}{AUD3WAVE}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} A\+U\+D3\+W\+A\+VE\mbox{[}16\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a271367a0bf840e5422b3a7ed541776f8}\label{gb_2hardware_8h_a271367a0bf840e5422b3a7ed541776f8}}
+\index{hardware.h@{hardware.h}!PCM\_SAMPLE@{PCM\_SAMPLE}}
+\index{PCM\_SAMPLE@{PCM\_SAMPLE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PCM\_SAMPLE}{PCM\_SAMPLE}}
+{\footnotesize\ttfamily \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}} P\+C\+M\+\_\+\+S\+A\+M\+P\+LE\mbox{[}16\mbox{]}}
+
+\mbox{\Hypertarget{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}\label{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}}
+\index{hardware.h@{hardware.h}!LCDC\_REG@{LCDC\_REG}}
+\index{LCDC\_REG@{LCDC\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LCDC\_REG}{LCDC\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} L\+C\+D\+C\+\_\+\+R\+EG}
+
+L\+CD control \mbox{\Hypertarget{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}\label{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}}
+\index{hardware.h@{hardware.h}!STAT\_REG@{STAT\_REG}}
+\index{STAT\_REG@{STAT\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STAT\_REG}{STAT\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+T\+A\+T\+\_\+\+R\+EG}
+
+L\+CD status \mbox{\Hypertarget{gb_2hardware_8h_a244b162cf13bbcb4fe842d7e298b39c2}\label{gb_2hardware_8h_a244b162cf13bbcb4fe842d7e298b39c2}}
+\index{hardware.h@{hardware.h}!SCY\_REG@{SCY\_REG}}
+\index{SCY\_REG@{SCY\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SCY\_REG}{SCY\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+C\+Y\+\_\+\+R\+EG}
+
+Scroll Y \mbox{\Hypertarget{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}\label{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}}
+\index{hardware.h@{hardware.h}!SCX\_REG@{SCX\_REG}}
+\index{SCX\_REG@{SCX\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SCX\_REG}{SCX\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+C\+X\+\_\+\+R\+EG}
+
+Scroll X \mbox{\Hypertarget{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}\label{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}}
+\index{hardware.h@{hardware.h}!LY\_REG@{LY\_REG}}
+\index{LY\_REG@{LY\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LY\_REG}{LY\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} L\+Y\+\_\+\+R\+EG}
+
+L\+C\+DC Y-\/coordinate \mbox{\Hypertarget{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}\label{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}}
+\index{hardware.h@{hardware.h}!LYC\_REG@{LYC\_REG}}
+\index{LYC\_REG@{LYC\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{LYC\_REG}{LYC\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} L\+Y\+C\+\_\+\+R\+EG}
+
+LY compare \mbox{\Hypertarget{gb_2hardware_8h_ae13ce414d3fe7c98c1434918186dfc81}\label{gb_2hardware_8h_ae13ce414d3fe7c98c1434918186dfc81}}
+\index{hardware.h@{hardware.h}!DMA\_REG@{DMA\_REG}}
+\index{DMA\_REG@{DMA\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DMA\_REG}{DMA\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} D\+M\+A\+\_\+\+R\+EG}
+
+D\+MA transfer \mbox{\Hypertarget{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}\label{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}}
+\index{hardware.h@{hardware.h}!BGP\_REG@{BGP\_REG}}
+\index{BGP\_REG@{BGP\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{BGP\_REG}{BGP\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} B\+G\+P\+\_\+\+R\+EG}
+
+BG palette data \mbox{\Hypertarget{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}\label{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}}
+\index{hardware.h@{hardware.h}!OBP0\_REG@{OBP0\_REG}}
+\index{OBP0\_REG@{OBP0\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OBP0\_REG}{OBP0\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} O\+B\+P0\+\_\+\+R\+EG}
+
+O\+BJ palette 0 data \mbox{\Hypertarget{gb_2hardware_8h_a9da545164e049ef773128f869daece13}\label{gb_2hardware_8h_a9da545164e049ef773128f869daece13}}
+\index{hardware.h@{hardware.h}!OBP1\_REG@{OBP1\_REG}}
+\index{OBP1\_REG@{OBP1\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OBP1\_REG}{OBP1\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} O\+B\+P1\+\_\+\+R\+EG}
+
+O\+BJ palette 1 data \mbox{\Hypertarget{gb_2hardware_8h_a1c8d52607616ef37da335447e4cbe850}\label{gb_2hardware_8h_a1c8d52607616ef37da335447e4cbe850}}
+\index{hardware.h@{hardware.h}!WY\_REG@{WY\_REG}}
+\index{WY\_REG@{WY\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{WY\_REG}{WY\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} W\+Y\+\_\+\+R\+EG}
+
+Window Y coordinate \mbox{\Hypertarget{gb_2hardware_8h_a310aa43fbee2fd6b6b419df48acce1e0}\label{gb_2hardware_8h_a310aa43fbee2fd6b6b419df48acce1e0}}
+\index{hardware.h@{hardware.h}!WX\_REG@{WX\_REG}}
+\index{WX\_REG@{WX\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{WX\_REG}{WX\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} W\+X\+\_\+\+R\+EG}
+
+Window X coordinate \mbox{\Hypertarget{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}\label{gb_2hardware_8h_a7279430d110acf02fa176d5f427a6491}}
+\index{hardware.h@{hardware.h}!KEY1\_REG@{KEY1\_REG}}
+\index{KEY1\_REG@{KEY1\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{KEY1\_REG}{KEY1\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} K\+E\+Y1\+\_\+\+R\+EG}
+
+C\+PU speed \mbox{\Hypertarget{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}\label{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}}
+\index{hardware.h@{hardware.h}!VBK\_REG@{VBK\_REG}}
+\index{VBK\_REG@{VBK\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VBK\_REG}{VBK\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} V\+B\+K\+\_\+\+R\+EG}
+
+V\+R\+AM bank select \mbox{\Hypertarget{gb_2hardware_8h_ab16e97796d675205a027b1b28b52956e}\label{gb_2hardware_8h_ab16e97796d675205a027b1b28b52956e}}
+\index{hardware.h@{hardware.h}!HDMA1\_REG@{HDMA1\_REG}}
+\index{HDMA1\_REG@{HDMA1\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA1\_REG}{HDMA1\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} H\+D\+M\+A1\+\_\+\+R\+EG}
+
+D\+MA control 1 \mbox{\Hypertarget{gb_2hardware_8h_a801400d58ab7d862742e43b49fa68c8d}\label{gb_2hardware_8h_a801400d58ab7d862742e43b49fa68c8d}}
+\index{hardware.h@{hardware.h}!HDMA2\_REG@{HDMA2\_REG}}
+\index{HDMA2\_REG@{HDMA2\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA2\_REG}{HDMA2\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} H\+D\+M\+A2\+\_\+\+R\+EG}
+
+D\+MA control 2 \mbox{\Hypertarget{gb_2hardware_8h_a57a94790cda8101a29c0d20086770f1b}\label{gb_2hardware_8h_a57a94790cda8101a29c0d20086770f1b}}
+\index{hardware.h@{hardware.h}!HDMA3\_REG@{HDMA3\_REG}}
+\index{HDMA3\_REG@{HDMA3\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA3\_REG}{HDMA3\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} H\+D\+M\+A3\+\_\+\+R\+EG}
+
+D\+MA control 3 \mbox{\Hypertarget{gb_2hardware_8h_a3a2e883779980c1c37e780f47da4dd69}\label{gb_2hardware_8h_a3a2e883779980c1c37e780f47da4dd69}}
+\index{hardware.h@{hardware.h}!HDMA4\_REG@{HDMA4\_REG}}
+\index{HDMA4\_REG@{HDMA4\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA4\_REG}{HDMA4\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} H\+D\+M\+A4\+\_\+\+R\+EG}
+
+D\+MA control 4 \mbox{\Hypertarget{gb_2hardware_8h_a1454ad6d5d04273eae1288af86deadac}\label{gb_2hardware_8h_a1454ad6d5d04273eae1288af86deadac}}
+\index{hardware.h@{hardware.h}!HDMA5\_REG@{HDMA5\_REG}}
+\index{HDMA5\_REG@{HDMA5\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{HDMA5\_REG}{HDMA5\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} H\+D\+M\+A5\+\_\+\+R\+EG}
+
+D\+MA control 5 \mbox{\Hypertarget{gb_2hardware_8h_a76532f8742d9dd8cb26d2ccfd9c37bbf}\label{gb_2hardware_8h_a76532f8742d9dd8cb26d2ccfd9c37bbf}}
+\index{hardware.h@{hardware.h}!RP\_REG@{RP\_REG}}
+\index{RP\_REG@{RP\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RP\_REG}{RP\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} R\+P\+\_\+\+R\+EG}
+
+IR port \mbox{\Hypertarget{gb_2hardware_8h_a28fa1ca08ef1c8ed97280bc5e60bdd99}\label{gb_2hardware_8h_a28fa1ca08ef1c8ed97280bc5e60bdd99}}
+\index{hardware.h@{hardware.h}!BCPS\_REG@{BCPS\_REG}}
+\index{BCPS\_REG@{BCPS\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{BCPS\_REG}{BCPS\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} B\+C\+P\+S\+\_\+\+R\+EG}
+
+BG color palette specification \mbox{\Hypertarget{gb_2hardware_8h_a1fc8ff37ffe1c431364e1ef7c3961b30}\label{gb_2hardware_8h_a1fc8ff37ffe1c431364e1ef7c3961b30}}
+\index{hardware.h@{hardware.h}!BCPD\_REG@{BCPD\_REG}}
+\index{BCPD\_REG@{BCPD\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{BCPD\_REG}{BCPD\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} B\+C\+P\+D\+\_\+\+R\+EG}
+
+BG color palette data \mbox{\Hypertarget{gb_2hardware_8h_a1686d2457eb4ad834bb75fb81c86aed8}\label{gb_2hardware_8h_a1686d2457eb4ad834bb75fb81c86aed8}}
+\index{hardware.h@{hardware.h}!OCPS\_REG@{OCPS\_REG}}
+\index{OCPS\_REG@{OCPS\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OCPS\_REG}{OCPS\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} O\+C\+P\+S\+\_\+\+R\+EG}
+
+O\+BJ color palette specification \mbox{\Hypertarget{gb_2hardware_8h_ae24d0e88a1e1b8367ac1f5709d3e500c}\label{gb_2hardware_8h_ae24d0e88a1e1b8367ac1f5709d3e500c}}
+\index{hardware.h@{hardware.h}!OCPD\_REG@{OCPD\_REG}}
+\index{OCPD\_REG@{OCPD\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{OCPD\_REG}{OCPD\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} O\+C\+P\+D\+\_\+\+R\+EG}
+
+O\+BJ color palette data \mbox{\Hypertarget{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}\label{gb_2hardware_8h_aa128832cecec4e609517fe3daf044e5e}}
+\index{hardware.h@{hardware.h}!SVBK\_REG@{SVBK\_REG}}
+\index{SVBK\_REG@{SVBK\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SVBK\_REG}{SVBK\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} S\+V\+B\+K\+\_\+\+R\+EG}
+
+W\+R\+AM bank \mbox{\Hypertarget{gb_2hardware_8h_a428894ca3fd0bb4527b03bed551ff04c}\label{gb_2hardware_8h_a428894ca3fd0bb4527b03bed551ff04c}}
+\index{hardware.h@{hardware.h}!PCM12\_REG@{PCM12\_REG}}
+\index{PCM12\_REG@{PCM12\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PCM12\_REG}{PCM12\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} P\+C\+M12\+\_\+\+R\+EG}
+
+Sound channel 1\&2 P\+CM amplitude (R) \mbox{\Hypertarget{gb_2hardware_8h_ac6d19ac313a99f41bd996e1ca5e43df0}\label{gb_2hardware_8h_ac6d19ac313a99f41bd996e1ca5e43df0}}
+\index{hardware.h@{hardware.h}!PCM34\_REG@{PCM34\_REG}}
+\index{PCM34\_REG@{PCM34\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PCM34\_REG}{PCM34\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} P\+C\+M34\+\_\+\+R\+EG}
+
+Sound channel 3\&4 P\+CM amplitude (R) \mbox{\Hypertarget{gb_2hardware_8h_aaef0dc6aab2f821ab406fdbc643af48e}\label{gb_2hardware_8h_aaef0dc6aab2f821ab406fdbc643af48e}}
+\index{hardware.h@{hardware.h}!IE\_REG@{IE\_REG}}
+\index{IE\_REG@{IE\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{IE\_REG}{IE\_REG}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} I\+E\+\_\+\+R\+EG}
+
+Interrupt enable
\ No newline at end of file
diff --git a/docs/latex/gb_2metasprites_8h.tex b/docs/latex/gb_2metasprites_8h.tex
new file mode 100644
index 00000000..57ca7be7
--- /dev/null
+++ b/docs/latex/gb_2metasprites_8h.tex
@@ -0,0 +1,328 @@
+\hypertarget{gb_2metasprites_8h}{}\doxysubsection{gb/metasprites.h File Reference}
+\label{gb_2metasprites_8h}\index{gb/metasprites.h@{gb/metasprites.h}}
+{\ttfamily \#include $<$gb/hardware.\+h$>$}\newline
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{gb_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}~-\/128
+\item
+\#define \mbox{\hyperlink{gb_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}{M\+E\+T\+A\+S\+P\+R\+\_\+\+I\+T\+EM}}(dy, dx, dt, a)~\{(dy),(dx),(dt),(a)\}
+\item
+\#define \mbox{\hyperlink{gb_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}{M\+E\+T\+A\+S\+P\+R\+\_\+\+T\+E\+RM}}~\{\mbox{\hyperlink{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}\}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}{metasprite\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{gb_2metasprites_8h_a77bb622fa362f2e04be1bafaa099a709}{hide\+\_\+sprites\+\_\+range}} (\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} from, \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} to) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_aa8ff2df0679ebb0b6e0a8f6d83127e1a}{move\+\_\+metasprite\+\_\+vflip}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_a27e3bb17d0458b60b1f0433f66301f46}{move\+\_\+metasprite\+\_\+hflip}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_a32a61acd4a76d1de5814f7b94c8bc23f}{move\+\_\+metasprite\+\_\+hvflip}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}{hide\+\_\+metasprite}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+const void $\ast$ \mbox{\hyperlink{gb_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}{\+\_\+\+\_\+current\+\_\+metasprite}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_a345fa52509387bd18a4092178a18286f}{\+\_\+\+\_\+current\+\_\+base\+\_\+tile}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}{\+\_\+\+\_\+render\+\_\+shadow\+\_\+\+O\+AM}}
+\item
+void \mbox{\hyperlink{gb_2metasprites_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+\hypertarget{gb_2metasprites_8h_autotoc_md1}{}\doxysubsubsection{Metasprite support}\label{gb_2metasprites_8h_autotoc_md1}
+A metasprite is a larger sprite made up from a collection of smaller individual hardware sprites. Different frames of the same metasprites can share tile data.
+
+The api supports metasprites in both \mbox{\hyperlink{sms_8h_aa87bec0d134136fdb727f52cb773b792}{S\+P\+R\+I\+T\+E\+S\+\_\+8x8}} and \mbox{\hyperlink{sms_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}} mode. If 8x16 mode is used then the height of the metasprite must be a multiple of 16.
+
+The origin (pivot) for the metasprite is not required to be in the upper left-\/hand corner as with regular hardware sprites.
+
+Use the \mbox{\hyperlink{docs_toolchain_utility_png2asset}{utility\+\_\+png2asset}} tool to convert single or multiple frames of graphics into metasprite structured data for use with the ...metasprite...() functions.\hypertarget{gb_2metasprites_8h_autotoc_md2}{}\doxysubsubsection{Metasprites composed of variable numbers of sprites}\label{gb_2metasprites_8h_autotoc_md2}
+When using png2asset, it\textquotesingle{}s common for the output of different frames to be composed of different numbers of hardware sprites (since it\textquotesingle{}s trying to create each frame as efficiently as possible). Due to that, it\textquotesingle{}s good practice to clear out (hide) unused sprites in the shadow\+\_\+\+O\+AM that have been set by previous frames.
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{comment}{// Example:}}
+\DoxyCodeLine{\textcolor{comment}{// Hide rest of the hardware sprites, because amount}}
+\DoxyCodeLine{\textcolor{comment}{// of sprites differ between animation frames.}}
+\DoxyCodeLine{\textcolor{comment}{// (where hiwater == last hardware sprite used + 1)}}
+\DoxyCodeLine{\textcolor{keywordflow}{for} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} i = hiwater; i < 40; i++) \mbox{\hyperlink{gb_8h_a3619f9cb1e3c92238a033ead79a0c551}{shadow\_OAM}}[i].y = 0;}
+\end{DoxyCode}
+
+
+\label{gb_2metasprites_8h_metasprite_and_sprite_properties}%
+\Hypertarget{gb_2metasprites_8h_metasprite_and_sprite_properties}%
+\hypertarget{gb_2metasprites_8h_autotoc_md3}{}\doxysubsubsection{Metasprites and sprite properties (including cgb palette)}\label{gb_2metasprites_8h_autotoc_md3}
+When the move\+\_\+metasprite\+\_\+$\ast$() functions are called they update all properties for the affected sprites in the Shadow O\+AM. This means any existing property flags set for a sprite (C\+GB palette, B\+G/\+W\+IN priority, Tile V\+R\+AM Bank) will get overwritten.
+
+How to use sprite property flags with metasprites\+:
+\begin{DoxyItemize}
+\item Metsaprite structures can be copied into R\+AM so their property flags can be modified at runtime.
+\item The metasprite structures can have the property flags modified before compilation (such as with {\ttfamily -\/sp $<$props$>$} in the \mbox{\hyperlink{docs_toolchain_utility_png2asset}{png2asset}} tool).
+\item Update properties for the affected sprites after calling a move\+\_\+metasprite\+\_\+$\ast$() function.
+\end{DoxyItemize}
+
+The following functions are only available for Game Boy and related clone consoles due to lack of hardware support for sprite flipping in other consoles. See \mbox{\hyperlink{docs_supported_consoles_docs_consoles_supported_list}{docs\+\_\+consoles\+\_\+supported\+\_\+list}}
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{gb_2metasprites_8h_aa8ff2df0679ebb0b6e0a8f6d83127e1a}{move\+\_\+metasprite\+\_\+vflip()}}
+\item \mbox{\hyperlink{gb_2metasprites_8h_a27e3bb17d0458b60b1f0433f66301f46}{move\+\_\+metasprite\+\_\+hflip()}}
+\item \mbox{\hyperlink{gb_2metasprites_8h_a32a61acd4a76d1de5814f7b94c8bc23f}{move\+\_\+metasprite\+\_\+hvflip()}}
+\end{DoxyItemize}
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{gb_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}\label{gb_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}}
+\index{metasprites.h@{metasprites.h}!metasprite\_end@{metasprite\_end}}
+\index{metasprite\_end@{metasprite\_end}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{metasprite\_end}{metasprite\_end}}
+{\footnotesize\ttfamily \#define metasprite\+\_\+end~-\/128}
+
+\mbox{\Hypertarget{gb_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}\label{gb_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}}
+\index{metasprites.h@{metasprites.h}!METASPR\_ITEM@{METASPR\_ITEM}}
+\index{METASPR\_ITEM@{METASPR\_ITEM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{METASPR\_ITEM}{METASPR\_ITEM}}
+{\footnotesize\ttfamily \#define M\+E\+T\+A\+S\+P\+R\+\_\+\+I\+T\+EM(\begin{DoxyParamCaption}\item[{}]{dy, }\item[{}]{dx, }\item[{}]{dt, }\item[{}]{a }\end{DoxyParamCaption})~\{(dy),(dx),(dt),(a)\}}
+
+\mbox{\Hypertarget{gb_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}\label{gb_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}}
+\index{metasprites.h@{metasprites.h}!METASPR\_TERM@{METASPR\_TERM}}
+\index{METASPR\_TERM@{METASPR\_TERM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{METASPR\_TERM}{METASPR\_TERM}}
+{\footnotesize\ttfamily \#define M\+E\+T\+A\+S\+P\+R\+\_\+\+T\+E\+RM~\{\mbox{\hyperlink{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}\}}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{gb_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}\label{gb_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}}
+\index{metasprites.h@{metasprites.h}!metasprite\_t@{metasprite\_t}}
+\index{metasprite\_t@{metasprite\_t}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{metasprite\_t}{metasprite\_t}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}}}
+
+Metasprite sub-\/item structure
+\begin{DoxyParams}{Parameters}
+{\em dy} & (int8\+\_\+t) Y coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dx} & (int8\+\_\+t) X coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dtile} & (uint8\+\_\+t) Start tile relative to the metasprites own set of tiles \\
+\hline
+{\em props} & (uint8\+\_\+t) Property Flags\\
+\hline
+\end{DoxyParams}
+Metasprites are built from multiple \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (one for each sub-\/sprite) and a pool of tiles they reference. If a metasprite has multiple frames then each frame will be built from some number of \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (which may vary based on how many sprites are required for that particular frame).
+
+A metasprite frame is terminated with a \{metasprite\+\_\+end\} entry.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{gb_2metasprites_8h_a77bb622fa362f2e04be1bafaa099a709}\label{gb_2metasprites_8h_a77bb622fa362f2e04be1bafaa099a709}}
+\index{metasprites.h@{metasprites.h}!hide\_sprites\_range@{hide\_sprites\_range}}
+\index{hide\_sprites\_range@{hide\_sprites\_range}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{hide\_sprites\_range()}{hide\_sprites\_range()}}
+{\footnotesize\ttfamily void hide\+\_\+sprites\+\_\+range (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}]{from, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}]{to }\end{DoxyParamCaption})}
+
+Hides all hardware sprites in range from $<$= X $<$ to
+\begin{DoxyParams}{Parameters}
+{\em from} & start O\+AM index \\
+\hline
+{\em to} & finish O\+AM index \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}\label{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}}
+\index{metasprites.h@{metasprites.h}!move\_metasprite@{move\_metasprite}}
+\index{move\_metasprite@{move\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{move\_metasprite()}{move\_metasprite()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} move\+\_\+metasprite (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves metasprite to the absolute position x and y
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to the first struct of the metasprite (for the desired frame) \\
+\hline
+{\em base\+\_\+tile} & Number of the first tile where the metasprite\textquotesingle{}s tiles start \\
+\hline
+{\em base\+\_\+sprite} & Number of the first hardware sprite to be used by the metasprite \\
+\hline
+{\em x} & Absolute x coordinate of the sprite \\
+\hline
+{\em y} & Absolute y coordinate of the sprite\\
+\hline
+\end{DoxyParams}
+Moves {\bfseries{metasprite}} to the absolute position {\bfseries{x}} and {\bfseries{y}} (with {\bfseries{no flip}} on the X or Y axis). Hardware sprites are allocated starting from {\bfseries{base\+\_\+sprite}}, using tiles starting from {\bfseries{base\+\_\+tile}}.
+
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \item \+\_\+\+\_\+current\+\_\+base\+\_\+tile = base\+\_\+tile;\end{DoxyItemize}
+Note\+: Overwrites O\+AM sprite properties (such as C\+GB Palette), see \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{Metasprites and sprite properties}}.
+
+\begin{DoxyReturn}{Returns}
+Number of hardware sprites used to draw this metasprite
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_2metasprites_8h_aa8ff2df0679ebb0b6e0a8f6d83127e1a}\label{gb_2metasprites_8h_aa8ff2df0679ebb0b6e0a8f6d83127e1a}}
+\index{metasprites.h@{metasprites.h}!move\_metasprite\_vflip@{move\_metasprite\_vflip}}
+\index{move\_metasprite\_vflip@{move\_metasprite\_vflip}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{move\_metasprite\_vflip()}{move\_metasprite\_vflip()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} move\+\_\+metasprite\+\_\+vflip (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves metasprite to the absolute position x and y, {\bfseries{flipped on the Y axis}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to the first struct of the metasprite (for the desired frame) \\
+\hline
+{\em base\+\_\+tile} & Number of the first tile where the metasprite\textquotesingle{}s tiles start \\
+\hline
+{\em base\+\_\+sprite} & Number of the first hardware sprite to be used by the metasprite \\
+\hline
+{\em x} & Absolute x coordinate of the sprite \\
+\hline
+{\em y} & Absolute y coordinate of the sprite\\
+\hline
+\end{DoxyParams}
+Same as \mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}, but with the metasprite flipped on the Y axis only.
+
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \item \+\_\+\+\_\+current\+\_\+base\+\_\+tile = base\+\_\+tile;\end{DoxyItemize}
+Note\+: Overwrites O\+AM sprite properties (such as C\+GB palette), see \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{Metasprites and sprite properties}}.
+
+This function is only available on Game Boy and related clone consoles.
+
+\begin{DoxyReturn}{Returns}
+Number of hardware sprites used to draw this metasprite
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2metasprites_8h_a27e3bb17d0458b60b1f0433f66301f46}\label{gb_2metasprites_8h_a27e3bb17d0458b60b1f0433f66301f46}}
+\index{metasprites.h@{metasprites.h}!move\_metasprite\_hflip@{move\_metasprite\_hflip}}
+\index{move\_metasprite\_hflip@{move\_metasprite\_hflip}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{move\_metasprite\_hflip()}{move\_metasprite\_hflip()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} move\+\_\+metasprite\+\_\+hflip (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves metasprite to the absolute position x and y, {\bfseries{flipped on the X axis}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to the first struct of the metasprite (for the desired frame) \\
+\hline
+{\em base\+\_\+tile} & Number of the first tile where the metasprite\textquotesingle{}s tiles start \\
+\hline
+{\em base\+\_\+sprite} & Number of the first hardware sprite to be used by the metasprite \\
+\hline
+{\em x} & Absolute x coordinate of the sprite \\
+\hline
+{\em y} & Absolute y coordinate of the sprite\\
+\hline
+\end{DoxyParams}
+Same as \mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}, but with the metasprite flipped on the X axis only.
+
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \item \+\_\+\+\_\+current\+\_\+base\+\_\+tile = base\+\_\+tile;\end{DoxyItemize}
+Note\+: Overwrites O\+AM sprite properties (such as C\+GB palette), see \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{Metasprites and sprite properties}}.
+
+This function is only available on Game Boy and related clone consoles.
+
+\begin{DoxyReturn}{Returns}
+Number of hardware sprites used to draw this metasprite
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2metasprites_8h_a32a61acd4a76d1de5814f7b94c8bc23f}\label{gb_2metasprites_8h_a32a61acd4a76d1de5814f7b94c8bc23f}}
+\index{metasprites.h@{metasprites.h}!move\_metasprite\_hvflip@{move\_metasprite\_hvflip}}
+\index{move\_metasprite\_hvflip@{move\_metasprite\_hvflip}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{move\_metasprite\_hvflip()}{move\_metasprite\_hvflip()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} move\+\_\+metasprite\+\_\+hvflip (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves metasprite to the absolute position x and y, {\bfseries{flipped on the X and Y axis}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to the first struct of the metasprite (for the desired frame) \\
+\hline
+{\em base\+\_\+tile} & Number of the first tile where the metasprite\textquotesingle{}s tiles start \\
+\hline
+{\em base\+\_\+sprite} & Number of the first hardware sprite to be used by the metasprite \\
+\hline
+{\em x} & Absolute x coordinate of the sprite \\
+\hline
+{\em y} & Absolute y coordinate of the sprite\\
+\hline
+\end{DoxyParams}
+Same as \mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}, but with the metasprite flipped on both the X and Y axis.
+
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \item \+\_\+\+\_\+current\+\_\+base\+\_\+tile = base\+\_\+tile;\end{DoxyItemize}
+Note\+: Overwrites O\+AM sprite properties (such as C\+GB palette), see \mbox{\hyperlink{gb_2metasprites_8h_metasprite_and_sprite_properties}{Metasprites and sprite properties}}.
+
+This function is only available on Game Boy and related clone consoles.
+
+\begin{DoxyReturn}{Returns}
+Number of hardware sprites used to draw this metasprite
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}\label{gb_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}}
+\index{metasprites.h@{metasprites.h}!hide\_metasprite@{hide\_metasprite}}
+\index{hide\_metasprite@{hide\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{hide\_metasprite()}{hide\_metasprite()}}
+{\footnotesize\ttfamily void hide\+\_\+metasprite (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Hides a metasprite from the screen
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to first struct of the desired metasprite frame \\
+\hline
+{\em base\+\_\+sprite} & Number of hardware sprite to start with\\
+\hline
+\end{DoxyParams}
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \end{DoxyItemize}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{gb_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}\label{gb_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}}
+\index{metasprites.h@{metasprites.h}!\_\_current\_metasprite@{\_\_current\_metasprite}}
+\index{\_\_current\_metasprite@{\_\_current\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_current\_metasprite}{\_\_current\_metasprite}}
+{\footnotesize\ttfamily const void$\ast$ \+\_\+\+\_\+current\+\_\+metasprite\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_2metasprites_8h_a345fa52509387bd18a4092178a18286f}\label{gb_2metasprites_8h_a345fa52509387bd18a4092178a18286f}}
+\index{metasprites.h@{metasprites.h}!\_\_current\_base\_tile@{\_\_current\_base\_tile}}
+\index{\_\_current\_base\_tile@{\_\_current\_base\_tile}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_current\_base\_tile}{\_\_current\_base\_tile}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+\+\_\+current\+\_\+base\+\_\+tile\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}\label{gb_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}}
+\index{metasprites.h@{metasprites.h}!\_\_render\_shadow\_OAM@{\_\_render\_shadow\_OAM}}
+\index{\_\_render\_shadow\_OAM@{\_\_render\_shadow\_OAM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_render\_shadow\_OAM}{\_\_render\_shadow\_OAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+\+\_\+render\+\_\+shadow\+\_\+\+O\+AM\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_2metasprites_8h_a0b3366755f3276b0243c1e0497471b7a}\label{gb_2metasprites_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{metasprites.h@{metasprites.h}!c@{c}}
+\index{c@{c}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
diff --git a/docs/latex/gb_8h.tex b/docs/latex/gb_8h.tex
new file mode 100644
index 00000000..07a5c9cc
--- /dev/null
+++ b/docs/latex/gb_8h.tex
@@ -0,0 +1,2933 @@
+\hypertarget{gb_8h}{}\doxysubsection{gb/gb.h File Reference}
+\label{gb_8h}\index{gb/gb.h@{gb/gb.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+{\ttfamily \#include $<$gbdk/version.\+h$>$}\newline
+{\ttfamily \#include $<$gb/hardware.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\item
+struct \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{gb_8h_a385397587c93683e8e11afb712e2960b}{N\+I\+N\+T\+E\+N\+DO}}
+\item
+\#define \mbox{\hyperlink{gb_8h_af10046e88cba47031142a763a94210df}{G\+A\+M\+E\+B\+OY}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a05ca817ab32f6da612c3ae26db5abf02}{J\+\_\+\+UP}}~0x04U
+\item
+\#define \mbox{\hyperlink{gb_8h_ae032c5c544196e37ec0432f6cfad7904}{J\+\_\+\+D\+O\+WN}}~0x08U
+\item
+\#define \mbox{\hyperlink{gb_8h_ac70894fecac30c1ca9917f07373cf81c}{J\+\_\+\+L\+E\+FT}}~0x02U
+\item
+\#define \mbox{\hyperlink{gb_8h_a3bad91d11ae09ffcbb3cb0a81873d325}{J\+\_\+\+R\+I\+G\+HT}}~0x01U
+\item
+\#define \mbox{\hyperlink{gb_8h_a31af766e3b598eb7a6b63f55a4988e7a}{J\+\_\+A}}~0x10U
+\item
+\#define \mbox{\hyperlink{gb_8h_ae47e59a309120f9420993f26816b5e6d}{J\+\_\+B}}~0x20U
+\item
+\#define \mbox{\hyperlink{gb_8h_ab416a9d96d1582490828f4bac78a8b5b}{J\+\_\+\+S\+E\+L\+E\+CT}}~0x40U
+\item
+\#define \mbox{\hyperlink{gb_8h_ab769c6e20778298be8bc3321476ceb53}{J\+\_\+\+S\+T\+A\+RT}}~0x80U
+\item
+\#define \mbox{\hyperlink{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}{M\+\_\+\+D\+R\+A\+W\+I\+NG}}~0x01U
+\item
+\#define \mbox{\hyperlink{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}~0x02U
+\item
+\#define \mbox{\hyperlink{gb_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}~0x03U
+\item
+\#define \mbox{\hyperlink{gb_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}~0x04U
+\item
+\#define \mbox{\hyperlink{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}~0x08U
+\item
+\#define \mbox{\hyperlink{gb_8h_a54572cf6791463b6d60623837e0bb5a6}{S\+\_\+\+P\+A\+L\+E\+T\+TE}}~0x10U
+\item
+\#define \mbox{\hyperlink{gb_8h_ae97793b4039609f93b0f7f8bddb18011}{S\+\_\+\+F\+L\+I\+PX}}~0x20U
+\item
+\#define \mbox{\hyperlink{gb_8h_a4bbb9cd6c38b2317de5256d1d889c63b}{S\+\_\+\+F\+L\+I\+PY}}~0x40U
+\item
+\#define \mbox{\hyperlink{gb_8h_a9506d04c2ec7d2442a52054f67d2b32f}{S\+\_\+\+P\+R\+I\+O\+R\+I\+TY}}~0x80U
+\item
+\#define \mbox{\hyperlink{gb_8h_aa027abe630d44039f238034bcb2d2f36}{E\+M\+P\+T\+Y\+\_\+\+I\+F\+L\+AG}}~0x00U
+\item
+\#define \mbox{\hyperlink{gb_8h_a2ca7720b9a5da9b2173e1f74dba85541}{V\+B\+L\+\_\+\+I\+F\+L\+AG}}~0x01U
+\item
+\#define \mbox{\hyperlink{gb_8h_a61a9e2910380de6abb34df14ef634eb4}{L\+C\+D\+\_\+\+I\+F\+L\+AG}}~0x02U
+\item
+\#define \mbox{\hyperlink{gb_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}~0x04U
+\item
+\#define \mbox{\hyperlink{gb_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}~0x08U
+\item
+\#define \mbox{\hyperlink{gb_8h_a2f829cf27d6e3e24c875e9b82dfcb280}{J\+O\+Y\+\_\+\+I\+F\+L\+AG}}~0x10U
+\item
+\#define \mbox{\hyperlink{gb_8h_ab311e53739c992294ae07ca506a924ad}{D\+M\+G\+\_\+\+B\+L\+A\+CK}}~0x03
+\item
+\#define \mbox{\hyperlink{gb_8h_a45d13a674e169dd83df7e1f46513ccba}{D\+M\+G\+\_\+\+D\+A\+R\+K\+\_\+\+G\+R\+AY}}~0x02
+\item
+\#define \mbox{\hyperlink{gb_8h_a8ccd6732d3bdf390cc0943e8567341f3}{D\+M\+G\+\_\+\+L\+I\+T\+E\+\_\+\+G\+R\+AY}}~0x01
+\item
+\#define \mbox{\hyperlink{gb_8h_a11cedc2ee58acfbbfc48dfb2b9a551b3}{D\+M\+G\+\_\+\+W\+H\+I\+TE}}~0x00
+\item
+\#define \mbox{\hyperlink{gb_8h_a9727caafc483ba6ec65e9344b033d684}{D\+M\+G\+\_\+\+P\+A\+L\+E\+T\+TE}}(C0, C1, C2, C3)~((\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((((C3) \& 0x03) $<$$<$ 6) $\vert$ (((C2) \& 0x03) $<$$<$ 4) $\vert$ (((C1) \& 0x03) $<$$<$ 2) $\vert$ ((C0) \& 0x03)))
+\item
+\#define \mbox{\hyperlink{gb_8h_ada0cc738d27aad251151e69cb8d250e1}{S\+C\+R\+E\+E\+N\+W\+I\+D\+TH}}~\mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}
+\item
+\#define \mbox{\hyperlink{gb_8h_ae189e98d0ef9263c37869ce1ff3710a5}{S\+C\+R\+E\+E\+N\+H\+E\+I\+G\+HT}}~\mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a5a796bbf3e4347d914b83568350143a9}{M\+I\+N\+W\+N\+D\+P\+O\+SX}}~0x07U
+\item
+\#define \mbox{\hyperlink{gb_8h_af3d632ba2d7cef6619df5dfea8730909}{M\+I\+N\+W\+N\+D\+P\+O\+SY}}~0x00U
+\item
+\#define \mbox{\hyperlink{gb_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}{M\+A\+X\+W\+N\+D\+P\+O\+SX}}~0x\+A6U
+\item
+\#define \mbox{\hyperlink{gb_8h_ad57f2f8c54204687f02801d8ab1bd150}{M\+A\+X\+W\+N\+D\+P\+O\+SY}}~0x8\+FU
+\item
+\#define \mbox{\hyperlink{gb_8h_a0031c07799247a6d6c1bfa3decac79d0}{D\+M\+G\+\_\+\+T\+Y\+PE}}~0x01
+\item
+\#define \mbox{\hyperlink{gb_8h_ae996ed4fd8bb6b308b9c8708a91df06b}{M\+G\+B\+\_\+\+T\+Y\+PE}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}}~0x11
+\item
+\#define \mbox{\hyperlink{gb_8h_aa311f84dd9fce6e136ba4881e7b0d98d}{G\+B\+A\+\_\+\+N\+O\+T\+\_\+\+D\+E\+T\+E\+C\+T\+ED}}~0x00
+\item
+\#define \mbox{\hyperlink{gb_8h_a6ccf5d0f34fb0af0b6e73b9df0ccd745}{G\+B\+A\+\_\+\+D\+E\+T\+E\+C\+T\+ED}}~0x01
+\item
+\#define \mbox{\hyperlink{gb_8h_a231ec05679809190782e61c6e8aaaba4}{D\+E\+V\+I\+C\+E\+\_\+\+S\+U\+P\+P\+O\+R\+T\+S\+\_\+\+C\+O\+L\+OR}}~(\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a268cc6c704e16f3fa02dd1cf0e17070a}{I\+O\+\_\+\+I\+D\+LE}}~0x00U
+\item
+\#define \mbox{\hyperlink{gb_8h_ab69a3f7cd2c6b5eb4f518aefee099007}{I\+O\+\_\+\+S\+E\+N\+D\+I\+NG}}~0x01U
+\item
+\#define \mbox{\hyperlink{gb_8h_aee03efddee0f2f6fbcaec789301aaa9b}{I\+O\+\_\+\+R\+E\+C\+E\+I\+V\+I\+NG}}~0x02U
+\item
+\#define \mbox{\hyperlink{gb_8h_a5d4c9c7b61a0326a939f9109f96d7423}{I\+O\+\_\+\+E\+R\+R\+OR}}~0x04U
+\item
+\#define \mbox{\hyperlink{gb_8h_ae042588f20bf5a2349c8ad8716245233}{C\+U\+R\+R\+E\+N\+T\+\_\+\+B\+A\+NK}}~\mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+NK}}(V\+A\+R\+N\+A\+ME)~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )
+\item
+\#define \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+EF}}(V\+A\+R\+N\+A\+ME)
+\item
+\#define \mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+RN}}(V\+A\+R\+N\+A\+ME)~extern const void \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME;
+\item
+\#define \mbox{\hyperlink{gb_8h_a3fca2d0a22aa2717e62fed659caf4743}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+E\+G\+A\+D\+U\+CK}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~ \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}), $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0001 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~ \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}), $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x2000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}{S\+W\+I\+T\+C\+H\+\_\+\+R\+OM}}~\mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x4000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a6e40dcc763efd953181c7400642a9f69}{S\+W\+I\+T\+C\+H\+\_\+\+R\+AM}}~\mbox{\hyperlink{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}
+\item
+\#define \mbox{\hyperlink{gb_8h_ae202f64307ec00f6970ef9225e54646c}{E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x0A
+\item
+\#define \mbox{\hyperlink{gb_8h_a0e9c88657beaac946231a4801481b97f}{E\+N\+A\+B\+L\+E\+\_\+\+R\+AM}}~\mbox{\hyperlink{gb_8h_ae202f64307ec00f6970ef9225e54646c}{E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a177fadce938422926b186a8e42575d1d}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x00
+\item
+\#define \mbox{\hyperlink{gb_8h_a649d27b5587de16a66176e03a1b8ebd5}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+AM}}~\mbox{\hyperlink{gb_8h_a177fadce938422926b186a8e42575d1d}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a0c689c5a814f1c347c4d98f28ed6c7d6}{S\+W\+I\+T\+C\+H\+\_\+16\+\_\+8\+\_\+\+M\+O\+D\+E\+\_\+\+M\+B\+C1}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x6000 = 0x00
+\item
+\#define \mbox{\hyperlink{gb_8h_aa5d64e386a00b373f22ffdc5a152c7ba}{S\+W\+I\+T\+C\+H\+\_\+4\+\_\+32\+\_\+\+M\+O\+D\+E\+\_\+\+M\+B\+C1}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x6000 = 0x01
+\item
+\#define \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a6c15ebc660abd3a978137493ab63ffe9}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5\+\_\+8M}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a361d5055a7ae880fc1c9d6e0d1164fd6}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x4000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{gb_8h_a3f033f00c8d781637f9a665b06750937}{E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x0A
+\item
+\#define \mbox{\hyperlink{gb_8h_a60191cdfa50ed9b88515f181747eaba2}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5}}~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x00
+\item
+\#define \mbox{\hyperlink{gb_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}{L\+C\+D\+C\+F\+\_\+\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_ad2ec9831813c5e7069917aa4455af682}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF}}~ \mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}();
+\item
+\#define \mbox{\hyperlink{gb_8h_a0659212acd317ccdebc0ecf435df330f}{H\+I\+D\+E\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a5497c2255a9474d397446710189eacbe}{S\+H\+O\+W\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}{L\+C\+D\+C\+F\+\_\+\+B\+G\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}{H\+I\+D\+E\+\_\+\+B\+KG}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}{L\+C\+D\+C\+F\+\_\+\+B\+G\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a495bc9f405f916f02ad5d97e6e730134}{S\+H\+O\+W\+\_\+\+S\+P\+R\+I\+T\+ES}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a69ef98aee664b8abd8d1a3d45f016dda}{H\+I\+D\+E\+\_\+\+S\+P\+R\+I\+T\+ES}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON}}
+\item
+\#define \mbox{\hyperlink{gb_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J16}}
+\item
+\#define \mbox{\hyperlink{gb_8h_aa87bec0d134136fdb727f52cb773b792}{S\+P\+R\+I\+T\+E\+S\+\_\+8x8}}~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J16}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a67f80e65620470b55a4950e2966eb868}{C\+O\+M\+P\+A\+T\+\_\+\+P\+A\+L\+E\+T\+TE}}(C0, C1, C2, C3)~((\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})(((C3) $<$$<$ 6) $\vert$ ((C2) $<$$<$ 4) $\vert$ ((C1) $<$$<$ 2) $\vert$ (C0)))
+\item
+\#define \mbox{\hyperlink{gb_8h_ab94bfec130df50d9cb808142f94603a5}{set\+\_\+bkg\+\_\+2bpp\+\_\+data}}~\mbox{\hyperlink{sms_8h_a8130306da1177f4fef89e699f8e2add4}{set\+\_\+bkg\+\_\+data}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a55f82ff980398dd97036fd936ebd727e}{set\+\_\+tile\+\_\+map}}~\mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}
+\item
+\#define \mbox{\hyperlink{gb_8h_adb5d0970167b81401113812773c90838}{set\+\_\+tile\+\_\+submap}}~\mbox{\hyperlink{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}{set\+\_\+bkg\+\_\+submap}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a3b235c526c517fb02d20cdea780ee2c5}{set\+\_\+tile\+\_\+xy}}~\mbox{\hyperlink{gb_8h_a74ee8f0a3495508c90de4ce246b81060}{set\+\_\+bkg\+\_\+tile\+\_\+xy}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a43b4f0ba65856deef626c0d9e7e41ed4}{set\+\_\+sprite\+\_\+2bpp\+\_\+data}}~\mbox{\hyperlink{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}{set\+\_\+sprite\+\_\+data}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a47607089a434dcda7a8583cfca03b604}{D\+I\+S\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = 0
+\item
+\#define \mbox{\hyperlink{gb_8h_abfd70bf31185a4900680977c9fb5a5ec}{D\+I\+S\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER}}~\mbox{\hyperlink{gb_8h_a47607089a434dcda7a8583cfca03b604}{D\+I\+S\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a20895d53fe9caacb08ce8b071d57ce53}{E\+N\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})\&\mbox{\hyperlink{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}{shadow\+\_\+\+O\+AM}} $>$$>$ 8)
+\item
+\#define \mbox{\hyperlink{gb_8h_a77d516c9d3f86f100eddea5e0d133a76}{E\+N\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER}}~\mbox{\hyperlink{gb_8h_a20895d53fe9caacb08ce8b071d57ce53}{E\+N\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}
+\item
+\#define \mbox{\hyperlink{gb_8h_a8b77608c87a9aef65a03531482b2163b}{M\+A\+X\+\_\+\+H\+A\+R\+D\+W\+A\+R\+E\+\_\+\+S\+P\+R\+I\+T\+ES}}~40
+\item
+\#define \mbox{\hyperlink{gb_8h_a47865835d7d007d71b4bc8ae5cefb73a}{fill\+\_\+rect}}~\mbox{\hyperlink{gb_8h_a74c3f53fca019f7abcd1270650808849}{fill\+\_\+bkg\+\_\+rect}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef void($\ast$ \mbox{\hyperlink{gb_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}) (void) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\item
+typedef struct \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}} \mbox{\hyperlink{gb_8h_a8e5ea12b86bdfc812448c2f5c4336c03}{O\+A\+M\+\_\+item\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+BL}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a32683767caa2a263a1f494b3605786e7}{remove\+\_\+\+L\+CD}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a142f6c7755fce8b1148faf658d8ec147}{remove\+\_\+\+T\+IM}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+IO}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a4a3e87e0917d5efb6bc7c94e9754fcd0}{remove\+\_\+\+J\+OY}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+BL}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a9f9f77105099a34556247d5bb03368d1}{add\+\_\+\+L\+CD}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a028d1a2e820951bb4f103d6469975ffb}{add\+\_\+\+T\+IM}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a970f18857533e062f4780f6e1c407d69}{add\+\_\+low\+\_\+priority\+\_\+\+T\+IM}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+IO}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}{add\+\_\+\+J\+OY}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}{nowait\+\_\+int\+\_\+handler}} ()
+\item
+void \mbox{\hyperlink{gb_8h_acc9afd0cb72e763a1213d256b942a68f}{wait\+\_\+int\+\_\+handler}} ()
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_ade5d4c955b871b0ed884273cc2b7215a}{cancel\+\_\+pending\+\_\+interrupts}} ()
+\item
+void \mbox{\hyperlink{gb_8h_a3ea524204d839377cf39842eec23e202}{mode}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} m) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a19969b36a6535fc6a966c0e5476baf9c}{get\+\_\+mode}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte}} ()
+\item
+void \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte}} ()
+\item
+void \mbox{\hyperlink{gb_8h_a2afae202a1f8ca59a12a6455bb909c5d}{delay}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{d}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_aae433db7d8e3ee4c095c254b8abd7b8b}{waitpad}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} mask) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a8484d346b788309ac702b7e0b1fca730}{waitpadup}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(a
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}{joypad\+\_\+init}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} npads, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$joypads) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}{joypad\+\_\+ex}} (\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$joypads) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(a
+\item
+void \mbox{\hyperlink{gb_8h_ad77796783b3a601b6f3781dfc3983499}{disable\+\_\+interrupts}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(a
+\item
+void \mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} flags) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ad20897c5c8bd47f5d4005989bead0e55}{reset}} ()
+\item
+void \mbox{\hyperlink{gb_8h_acd186eb292d441f9389e77b545a55619}{wait\+\_\+vbl\+\_\+done}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a04d57683cdd046dfa45e7e56d7c4ec4d}{display\+\_\+off}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a2550e7b6b9fd7e1fc495872502311dbb}{refresh\+\_\+\+O\+AM}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a97b9f2fc6ac7cae97656aca940d65d44}{hiramcpy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} dst, const void $\ast$src, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} n) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a7080649e10765996c581e5b618e603b8}{set\+\_\+vram\+\_\+byte}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$addr, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} v) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}{get\+\_\+vram\+\_\+byte}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$addr) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{gb_8h_a9005b80d3315f50f0fb0e1728e7ee60f}{get\+\_\+bkg\+\_\+xy\+\_\+addr}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_aa224c9bac27c7fd268e62bdf33338a84}{set\+\_\+2bpp\+\_\+palette}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} palette)
+\item
+void \mbox{\hyperlink{gb_8h_a1f00bd35cd56aac84c108f5a802c3f9c}{set\+\_\+1bpp\+\_\+colors\+\_\+ex}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} fgcolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} bgcolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_adcb394299a1033616fc7d2faec8bd6ad}{set\+\_\+1bpp\+\_\+colors}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} fgcolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} bgcolor)
+\item
+void \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a711fa26feecc76dc51482b0f77062859}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a5c13238dfec416439d75b133a272e6df}{get\+\_\+bkg\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a811c386cac0df2d260aacb5a43608be5}{set\+\_\+bkg\+\_\+based\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}{get\+\_\+bkg\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{gb_8h_a74ee8f0a3495508c90de4ce246b81060}{set\+\_\+bkg\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} t) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a55c6581dbe9300dc6df41730f090af51}{get\+\_\+bkg\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a6261537edc74068e3f7f057e6a3e8a57}{move\+\_\+bkg}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_8h_a1f583f7a880daa6145ca78b086a209d1}{scroll\+\_\+bkg}} (\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} y)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{gb_8h_aa8213cfad631865e3b6faec18e772cb4}{get\+\_\+win\+\_\+xy\+\_\+addr}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}{set\+\_\+win\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_acd5ee7a94059e6edbe9223f291bc2b46}{set\+\_\+win\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a7ef32e7c1669aba48f235500a495baba}{get\+\_\+win\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a739a212609ae60c9c56c095f96b4ea80}{set\+\_\+win\+\_\+based\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{gb_8h_a1b8a1026983cb2b2c0bd46334b4692a0}{set\+\_\+win\+\_\+based\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{gb_8h_a8a469de4c6640f921254b336b5a6191a}{get\+\_\+win\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{gb_8h_a0c70a53db1fbc0c99627da3f282befd8}{set\+\_\+win\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} t) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a2e29fdca81c28c627c2591029722e71c}{get\+\_\+win\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_8h_a12c2b5ac249d01caf1561cbbf3962044}{scroll\+\_\+win}} (\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_8h_ae45b1c639698951b47e44fa8e89556f2}{set\+\_\+sprite\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ab3e60c92c9f8fbed855f8712187ea3ea}{set\+\_\+sprite\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_adcdec4034a14abc5be9bb88c29b947c9}{get\+\_\+sprite\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}{S\+E\+T\+\_\+\+S\+H\+A\+D\+O\+W\+\_\+\+O\+A\+M\+\_\+\+A\+D\+D\+R\+E\+SS}} (void $\ast$address)
+\item
+void \mbox{\hyperlink{gb_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} tile)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_af5c0beff7d7a7d8641b51fd95c811b2a}{get\+\_\+sprite\+\_\+tile}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} prop)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a6b873c807c9e2c90fb574951e85fdf88}{get\+\_\+sprite\+\_\+prop}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{gb_8h_ab42c12c1d9aed3fd963248fbea9830cd}{move\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}{scroll\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{gb_8h_ad22c51635d052399bbbe1777999c794d}{hide\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{gb_8h_a650d2df96e69a40b70548ab468e00f25}{set\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$vram\+\_\+addr, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_afd8fd71eaa36b0ddd54a2e8e516ed224}{get\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$vram\+\_\+addr, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a36f9e5d95c2d7d58f203b5ac358e25e7}{vmemcpy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$dest, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$vram\+\_\+addr, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}{set\+\_\+tile\+\_\+data}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a728b9440accedc5fb3477be3d150323a}{get\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$vram\+\_\+addr, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a68651e50243349b48164a8ad983dca4e}{set\+\_\+native\+\_\+tile\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} first\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+tiles, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$data)
+\item
+void \mbox{\hyperlink{gb_8h_af6ac67037de041eb0141ba3725b1db83}{init\+\_\+win}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a46058204097dd305bf72bc20ea7f7a3b}{init\+\_\+bkg}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a97bab71effd5e4e386629cb6ca5816cf}{vmemset}} (void $\ast$s, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} n) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a74c3f53fca019f7abcd1270650808849}{fill\+\_\+bkg\+\_\+rect}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} tile) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_ad5bc3dc922707507aa51ed7f5b4a21e3}{fill\+\_\+win\+\_\+rect}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} tile) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}{\+\_\+is\+\_\+\+G\+BA}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{gb_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a2e3415ce2f7fb63427618bd9b9cb6635}{\+\_\+io\+\_\+status}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a02f3a1585ae654444e628c1aa98ef0cf}{\+\_\+io\+\_\+in}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_acae13736da20f9fc53e8d38934aa2119}{\+\_\+io\+\_\+out}}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_af79b920bcb642bba2e652874c4f7eeff}{l}}
+\item
+void \mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{gb_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{d}}
+\item
+void \mbox{\hyperlink{gb_8h_aeda4515a31485c9688c4601ac5ce2d79}{e}}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{gb_8h_a250f5339e05523912926be566e9eb8c0}{\+\_\+current\+\_\+1bpp\+\_\+colors}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_aa82205e9629f984d0b3dc8055c211522}{\+\_\+map\+\_\+tile\+\_\+offset}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{gb_8h_ab472d9bbb1bcfd141374f5babc71934c}{\+\_\+submap\+\_\+tile\+\_\+offset}}
+\item
+volatile struct \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}} \mbox{\hyperlink{gb_8h_a3619f9cb1e3c92238a033ead79a0c551}{shadow\+\_\+\+O\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \mbox{\hyperlink{gb_8h_a7b662ae4d83f9837bacb9fd580673054}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Gameboy specific functions.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{gb_8h_a385397587c93683e8e11afb712e2960b}\label{gb_8h_a385397587c93683e8e11afb712e2960b}}
+\index{gb.h@{gb.h}!NINTENDO@{NINTENDO}}
+\index{NINTENDO@{NINTENDO}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{NINTENDO}{NINTENDO}}
+{\footnotesize\ttfamily \#define N\+I\+N\+T\+E\+N\+DO}
+
+\mbox{\Hypertarget{gb_8h_af10046e88cba47031142a763a94210df}\label{gb_8h_af10046e88cba47031142a763a94210df}}
+\index{gb.h@{gb.h}!GAMEBOY@{GAMEBOY}}
+\index{GAMEBOY@{GAMEBOY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{GAMEBOY}{GAMEBOY}}
+{\footnotesize\ttfamily \#define G\+A\+M\+E\+B\+OY}
+
+\mbox{\Hypertarget{gb_8h_a05ca817ab32f6da612c3ae26db5abf02}\label{gb_8h_a05ca817ab32f6da612c3ae26db5abf02}}
+\index{gb.h@{gb.h}!J\_UP@{J\_UP}}
+\index{J\_UP@{J\_UP}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_UP}{J\_UP}}
+{\footnotesize\ttfamily \#define J\+\_\+\+UP~0x04U}
+
+Joypad bits. A logical OR of these is used in the wait\+\_\+pad and joypad functions. For example, to see if the B button is pressed try
+
+uint8\+\_\+t keys; keys = \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}}; if (keys \& J\+\_\+B) \{ ... \}
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae032c5c544196e37ec0432f6cfad7904}\label{gb_8h_ae032c5c544196e37ec0432f6cfad7904}}
+\index{gb.h@{gb.h}!J\_DOWN@{J\_DOWN}}
+\index{J\_DOWN@{J\_DOWN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_DOWN}{J\_DOWN}}
+{\footnotesize\ttfamily \#define J\+\_\+\+D\+O\+WN~0x08U}
+
+\mbox{\Hypertarget{gb_8h_ac70894fecac30c1ca9917f07373cf81c}\label{gb_8h_ac70894fecac30c1ca9917f07373cf81c}}
+\index{gb.h@{gb.h}!J\_LEFT@{J\_LEFT}}
+\index{J\_LEFT@{J\_LEFT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_LEFT}{J\_LEFT}}
+{\footnotesize\ttfamily \#define J\+\_\+\+L\+E\+FT~0x02U}
+
+\mbox{\Hypertarget{gb_8h_a3bad91d11ae09ffcbb3cb0a81873d325}\label{gb_8h_a3bad91d11ae09ffcbb3cb0a81873d325}}
+\index{gb.h@{gb.h}!J\_RIGHT@{J\_RIGHT}}
+\index{J\_RIGHT@{J\_RIGHT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_RIGHT}{J\_RIGHT}}
+{\footnotesize\ttfamily \#define J\+\_\+\+R\+I\+G\+HT~0x01U}
+
+\mbox{\Hypertarget{gb_8h_a31af766e3b598eb7a6b63f55a4988e7a}\label{gb_8h_a31af766e3b598eb7a6b63f55a4988e7a}}
+\index{gb.h@{gb.h}!J\_A@{J\_A}}
+\index{J\_A@{J\_A}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_A}{J\_A}}
+{\footnotesize\ttfamily \#define J\+\_\+A~0x10U}
+
+\mbox{\Hypertarget{gb_8h_ae47e59a309120f9420993f26816b5e6d}\label{gb_8h_ae47e59a309120f9420993f26816b5e6d}}
+\index{gb.h@{gb.h}!J\_B@{J\_B}}
+\index{J\_B@{J\_B}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_B}{J\_B}}
+{\footnotesize\ttfamily \#define J\+\_\+B~0x20U}
+
+\mbox{\Hypertarget{gb_8h_ab416a9d96d1582490828f4bac78a8b5b}\label{gb_8h_ab416a9d96d1582490828f4bac78a8b5b}}
+\index{gb.h@{gb.h}!J\_SELECT@{J\_SELECT}}
+\index{J\_SELECT@{J\_SELECT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_SELECT}{J\_SELECT}}
+{\footnotesize\ttfamily \#define J\+\_\+\+S\+E\+L\+E\+CT~0x40U}
+
+\mbox{\Hypertarget{gb_8h_ab769c6e20778298be8bc3321476ceb53}\label{gb_8h_ab769c6e20778298be8bc3321476ceb53}}
+\index{gb.h@{gb.h}!J\_START@{J\_START}}
+\index{J\_START@{J\_START}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{J\_START}{J\_START}}
+{\footnotesize\ttfamily \#define J\+\_\+\+S\+T\+A\+RT~0x80U}
+
+\mbox{\Hypertarget{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}\label{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}}
+\index{gb.h@{gb.h}!M\_DRAWING@{M\_DRAWING}}
+\index{M\_DRAWING@{M\_DRAWING}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{M\_DRAWING}{M\_DRAWING}}
+{\footnotesize\ttfamily \#define M\+\_\+\+D\+R\+A\+W\+I\+NG~0x01U}
+
+Screen modes. Normally used by internal functions only. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}\label{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}}
+\index{gb.h@{gb.h}!M\_TEXT\_OUT@{M\_TEXT\_OUT}}
+\index{M\_TEXT\_OUT@{M\_TEXT\_OUT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{M\_TEXT\_OUT}{M\_TEXT\_OUT}}
+{\footnotesize\ttfamily \#define M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT~0x02U}
+
+\mbox{\Hypertarget{gb_8h_a908826e7180f94a5988ceb8633313a2e}\label{gb_8h_a908826e7180f94a5988ceb8633313a2e}}
+\index{gb.h@{gb.h}!M\_TEXT\_INOUT@{M\_TEXT\_INOUT}}
+\index{M\_TEXT\_INOUT@{M\_TEXT\_INOUT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{M\_TEXT\_INOUT}{M\_TEXT\_INOUT}}
+{\footnotesize\ttfamily \#define M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT~0x03U}
+
+\mbox{\Hypertarget{gb_8h_a04382de20738146fe873ddfb0585052b}\label{gb_8h_a04382de20738146fe873ddfb0585052b}}
+\index{gb.h@{gb.h}!M\_NO\_SCROLL@{M\_NO\_SCROLL}}
+\index{M\_NO\_SCROLL@{M\_NO\_SCROLL}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{M\_NO\_SCROLL}{M\_NO\_SCROLL}}
+{\footnotesize\ttfamily \#define M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL~0x04U}
+
+Set this in addition to the others to disable scrolling
+
+If scrolling is disabled, the cursor returns to (0,0) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}\label{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}}
+\index{gb.h@{gb.h}!M\_NO\_INTERP@{M\_NO\_INTERP}}
+\index{M\_NO\_INTERP@{M\_NO\_INTERP}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{M\_NO\_INTERP}{M\_NO\_INTERP}}
+{\footnotesize\ttfamily \#define M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP~0x08U}
+
+Set this to disable interpretation \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a54572cf6791463b6d60623837e0bb5a6}\label{gb_8h_a54572cf6791463b6d60623837e0bb5a6}}
+\index{gb.h@{gb.h}!S\_PALETTE@{S\_PALETTE}}
+\index{S\_PALETTE@{S\_PALETTE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{S\_PALETTE}{S\_PALETTE}}
+{\footnotesize\ttfamily \#define S\+\_\+\+P\+A\+L\+E\+T\+TE~0x10U}
+
+If this is set, sprite colours come from O\+B\+J1\+P\+AL. Else they come from O\+B\+J0\+P\+AL \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop()}}.
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae97793b4039609f93b0f7f8bddb18011}\label{gb_8h_ae97793b4039609f93b0f7f8bddb18011}}
+\index{gb.h@{gb.h}!S\_FLIPX@{S\_FLIPX}}
+\index{S\_FLIPX@{S\_FLIPX}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{S\_FLIPX}{S\_FLIPX}}
+{\footnotesize\ttfamily \#define S\+\_\+\+F\+L\+I\+PX~0x20U}
+
+If set the sprite will be flipped horizontally. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a4bbb9cd6c38b2317de5256d1d889c63b}\label{gb_8h_a4bbb9cd6c38b2317de5256d1d889c63b}}
+\index{gb.h@{gb.h}!S\_FLIPY@{S\_FLIPY}}
+\index{S\_FLIPY@{S\_FLIPY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{S\_FLIPY}{S\_FLIPY}}
+{\footnotesize\ttfamily \#define S\+\_\+\+F\+L\+I\+PY~0x40U}
+
+If set the sprite will be flipped vertically. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a9506d04c2ec7d2442a52054f67d2b32f}\label{gb_8h_a9506d04c2ec7d2442a52054f67d2b32f}}
+\index{gb.h@{gb.h}!S\_PRIORITY@{S\_PRIORITY}}
+\index{S\_PRIORITY@{S\_PRIORITY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{S\_PRIORITY}{S\_PRIORITY}}
+{\footnotesize\ttfamily \#define S\+\_\+\+P\+R\+I\+O\+R\+I\+TY~0x80U}
+
+If this bit is clear, then the sprite will be displayed on top of the background and window. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa027abe630d44039f238034bcb2d2f36}\label{gb_8h_aa027abe630d44039f238034bcb2d2f36}}
+\index{gb.h@{gb.h}!EMPTY\_IFLAG@{EMPTY\_IFLAG}}
+\index{EMPTY\_IFLAG@{EMPTY\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{EMPTY\_IFLAG}{EMPTY\_IFLAG}}
+{\footnotesize\ttfamily \#define E\+M\+P\+T\+Y\+\_\+\+I\+F\+L\+AG~0x00U}
+
+Disable calling of interrupt service routines \mbox{\Hypertarget{gb_8h_a2ca7720b9a5da9b2173e1f74dba85541}\label{gb_8h_a2ca7720b9a5da9b2173e1f74dba85541}}
+\index{gb.h@{gb.h}!VBL\_IFLAG@{VBL\_IFLAG}}
+\index{VBL\_IFLAG@{VBL\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{VBL\_IFLAG}{VBL\_IFLAG}}
+{\footnotesize\ttfamily \#define V\+B\+L\+\_\+\+I\+F\+L\+AG~0x01U}
+
+V\+Blank Interrupt occurs at the start of the vertical blank.
+
+During this period the video ram may be freely accessed. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+BL}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a61a9e2910380de6abb34df14ef634eb4}\label{gb_8h_a61a9e2910380de6abb34df14ef634eb4}}
+\index{gb.h@{gb.h}!LCD\_IFLAG@{LCD\_IFLAG}}
+\index{LCD\_IFLAG@{LCD\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{LCD\_IFLAG}{LCD\_IFLAG}}
+{\footnotesize\ttfamily \#define L\+C\+D\+\_\+\+I\+F\+L\+AG~0x02U}
+
+L\+CD Interrupt when triggered by the S\+T\+AT register. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{gb_8h_a9f9f77105099a34556247d5bb03368d1}{add\+\_\+\+L\+CD}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a604256210ec5b90b68185e1a18efab49}\label{gb_8h_a604256210ec5b90b68185e1a18efab49}}
+\index{gb.h@{gb.h}!TIM\_IFLAG@{TIM\_IFLAG}}
+\index{TIM\_IFLAG@{TIM\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{TIM\_IFLAG}{TIM\_IFLAG}}
+{\footnotesize\ttfamily \#define T\+I\+M\+\_\+\+I\+F\+L\+AG~0x04U}
+
+Timer Interrupt when the timer \mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}} overflows. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{gb_8h_a028d1a2e820951bb4f103d6469975ffb}{add\+\_\+\+T\+IM}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad90564458646c5646b3880b93db3443e}\label{gb_8h_ad90564458646c5646b3880b93db3443e}}
+\index{gb.h@{gb.h}!SIO\_IFLAG@{SIO\_IFLAG}}
+\index{SIO\_IFLAG@{SIO\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SIO\_IFLAG}{SIO\_IFLAG}}
+{\footnotesize\ttfamily \#define S\+I\+O\+\_\+\+I\+F\+L\+AG~0x08U}
+
+Serial Link Interrupt occurs when the serial transfer has completed. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+IO}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a2f829cf27d6e3e24c875e9b82dfcb280}\label{gb_8h_a2f829cf27d6e3e24c875e9b82dfcb280}}
+\index{gb.h@{gb.h}!JOY\_IFLAG@{JOY\_IFLAG}}
+\index{JOY\_IFLAG@{JOY\_IFLAG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{JOY\_IFLAG}{JOY\_IFLAG}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+I\+F\+L\+AG~0x10U}
+
+Joypad Interrupt occurs on a transition of the keypad. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}{add\+\_\+\+J\+OY}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ab311e53739c992294ae07ca506a924ad}\label{gb_8h_ab311e53739c992294ae07ca506a924ad}}
+\index{gb.h@{gb.h}!DMG\_BLACK@{DMG\_BLACK}}
+\index{DMG\_BLACK@{DMG\_BLACK}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_BLACK}{DMG\_BLACK}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+B\+L\+A\+CK~0x03}
+
+\mbox{\Hypertarget{gb_8h_a45d13a674e169dd83df7e1f46513ccba}\label{gb_8h_a45d13a674e169dd83df7e1f46513ccba}}
+\index{gb.h@{gb.h}!DMG\_DARK\_GRAY@{DMG\_DARK\_GRAY}}
+\index{DMG\_DARK\_GRAY@{DMG\_DARK\_GRAY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_DARK\_GRAY}{DMG\_DARK\_GRAY}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+D\+A\+R\+K\+\_\+\+G\+R\+AY~0x02}
+
+\mbox{\Hypertarget{gb_8h_a8ccd6732d3bdf390cc0943e8567341f3}\label{gb_8h_a8ccd6732d3bdf390cc0943e8567341f3}}
+\index{gb.h@{gb.h}!DMG\_LITE\_GRAY@{DMG\_LITE\_GRAY}}
+\index{DMG\_LITE\_GRAY@{DMG\_LITE\_GRAY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_LITE\_GRAY}{DMG\_LITE\_GRAY}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+L\+I\+T\+E\+\_\+\+G\+R\+AY~0x01}
+
+\mbox{\Hypertarget{gb_8h_a11cedc2ee58acfbbfc48dfb2b9a551b3}\label{gb_8h_a11cedc2ee58acfbbfc48dfb2b9a551b3}}
+\index{gb.h@{gb.h}!DMG\_WHITE@{DMG\_WHITE}}
+\index{DMG\_WHITE@{DMG\_WHITE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_WHITE}{DMG\_WHITE}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+W\+H\+I\+TE~0x00}
+
+\mbox{\Hypertarget{gb_8h_a9727caafc483ba6ec65e9344b033d684}\label{gb_8h_a9727caafc483ba6ec65e9344b033d684}}
+\index{gb.h@{gb.h}!DMG\_PALETTE@{DMG\_PALETTE}}
+\index{DMG\_PALETTE@{DMG\_PALETTE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_PALETTE}{DMG\_PALETTE}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+P\+A\+L\+E\+T\+TE(\begin{DoxyParamCaption}\item[{}]{C0, }\item[{}]{C1, }\item[{}]{C2, }\item[{}]{C3 }\end{DoxyParamCaption})~((\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((((C3) \& 0x03) $<$$<$ 6) $\vert$ (((C2) \& 0x03) $<$$<$ 4) $\vert$ (((C1) \& 0x03) $<$$<$ 2) $\vert$ ((C0) \& 0x03)))}
+
+Macro to create a D\+MG palette from 4 colors
+
+
+\begin{DoxyParams}{Parameters}
+{\em C0} & Color for Index 0 \\
+\hline
+{\em C1} & Color for Index 1 \\
+\hline
+{\em C2} & Color for Index 2 \\
+\hline
+{\em C3} & Color for Index 3\\
+\hline
+\end{DoxyParams}
+The resulting format is four greyscale colors packed into a single unsigned byte.
+
+Example\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{REG\_BGP = \mbox{\hyperlink{gb_8h_a9727caafc483ba6ec65e9344b033d684}{DMG\_PALETTE}}(\mbox{\hyperlink{gb_8h_ab311e53739c992294ae07ca506a924ad}{DMG\_BLACK}}, \mbox{\hyperlink{gb_8h_a45d13a674e169dd83df7e1f46513ccba}{DMG\_DARK\_GRAY}}, \mbox{\hyperlink{gb_8h_a8ccd6732d3bdf390cc0943e8567341f3}{DMG\_LITE\_GRAY}}, \mbox{\hyperlink{gb_8h_a11cedc2ee58acfbbfc48dfb2b9a551b3}{DMG\_WHITE}});}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2hardware_8h_a13f3e89f7b92258d825292e5058815c7}{O\+B\+P0\+\_\+\+R\+EG}}, \mbox{\hyperlink{gb_2hardware_8h_a9da545164e049ef773128f869daece13}{O\+B\+P1\+\_\+\+R\+EG}}, \mbox{\hyperlink{gb_2hardware_8h_af577ba87ec3d13d7415e4c4a53cdf997}{B\+G\+P\+\_\+\+R\+EG}}
+
+\mbox{\hyperlink{gb_8h_ab311e53739c992294ae07ca506a924ad}{D\+M\+G\+\_\+\+B\+L\+A\+CK}}, \mbox{\hyperlink{gb_8h_a45d13a674e169dd83df7e1f46513ccba}{D\+M\+G\+\_\+\+D\+A\+R\+K\+\_\+\+G\+R\+AY}}, \mbox{\hyperlink{gb_8h_a8ccd6732d3bdf390cc0943e8567341f3}{D\+M\+G\+\_\+\+L\+I\+T\+E\+\_\+\+G\+R\+AY}}, \mbox{\hyperlink{gb_8h_a11cedc2ee58acfbbfc48dfb2b9a551b3}{D\+M\+G\+\_\+\+W\+H\+I\+TE}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ada0cc738d27aad251151e69cb8d250e1}\label{gb_8h_ada0cc738d27aad251151e69cb8d250e1}}
+\index{gb.h@{gb.h}!SCREENWIDTH@{SCREENWIDTH}}
+\index{SCREENWIDTH@{SCREENWIDTH}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SCREENWIDTH}{SCREENWIDTH}}
+{\footnotesize\ttfamily \#define S\+C\+R\+E\+E\+N\+W\+I\+D\+TH~\mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}}
+
+Width of the visible screen in pixels. \mbox{\Hypertarget{gb_8h_ae189e98d0ef9263c37869ce1ff3710a5}\label{gb_8h_ae189e98d0ef9263c37869ce1ff3710a5}}
+\index{gb.h@{gb.h}!SCREENHEIGHT@{SCREENHEIGHT}}
+\index{SCREENHEIGHT@{SCREENHEIGHT}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SCREENHEIGHT}{SCREENHEIGHT}}
+{\footnotesize\ttfamily \#define S\+C\+R\+E\+E\+N\+H\+E\+I\+G\+HT~\mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}}
+
+Height of the visible screen in pixels. \mbox{\Hypertarget{gb_8h_a5a796bbf3e4347d914b83568350143a9}\label{gb_8h_a5a796bbf3e4347d914b83568350143a9}}
+\index{gb.h@{gb.h}!MINWNDPOSX@{MINWNDPOSX}}
+\index{MINWNDPOSX@{MINWNDPOSX}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MINWNDPOSX}{MINWNDPOSX}}
+{\footnotesize\ttfamily \#define M\+I\+N\+W\+N\+D\+P\+O\+SX~0x07U}
+
+The Minimum X position of the Window Layer (Left edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_af3d632ba2d7cef6619df5dfea8730909}\label{gb_8h_af3d632ba2d7cef6619df5dfea8730909}}
+\index{gb.h@{gb.h}!MINWNDPOSY@{MINWNDPOSY}}
+\index{MINWNDPOSY@{MINWNDPOSY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MINWNDPOSY}{MINWNDPOSY}}
+{\footnotesize\ttfamily \#define M\+I\+N\+W\+N\+D\+P\+O\+SY~0x00U}
+
+The Minimum Y position of the Window Layer (Top edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}\label{gb_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}}
+\index{gb.h@{gb.h}!MAXWNDPOSX@{MAXWNDPOSX}}
+\index{MAXWNDPOSX@{MAXWNDPOSX}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MAXWNDPOSX}{MAXWNDPOSX}}
+{\footnotesize\ttfamily \#define M\+A\+X\+W\+N\+D\+P\+O\+SX~0x\+A6U}
+
+The Maximum X position of the Window Layer (Right edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad57f2f8c54204687f02801d8ab1bd150}\label{gb_8h_ad57f2f8c54204687f02801d8ab1bd150}}
+\index{gb.h@{gb.h}!MAXWNDPOSY@{MAXWNDPOSY}}
+\index{MAXWNDPOSY@{MAXWNDPOSY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MAXWNDPOSY}{MAXWNDPOSY}}
+{\footnotesize\ttfamily \#define M\+A\+X\+W\+N\+D\+P\+O\+SY~0x8\+FU}
+
+The Maximum Y position of the Window Layer (Bottom edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a0031c07799247a6d6c1bfa3decac79d0}\label{gb_8h_a0031c07799247a6d6c1bfa3decac79d0}}
+\index{gb.h@{gb.h}!DMG\_TYPE@{DMG\_TYPE}}
+\index{DMG\_TYPE@{DMG\_TYPE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DMG\_TYPE}{DMG\_TYPE}}
+{\footnotesize\ttfamily \#define D\+M\+G\+\_\+\+T\+Y\+PE~0x01}
+
+Hardware Model\+: Original GB or Super GB. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae996ed4fd8bb6b308b9c8708a91df06b}\label{gb_8h_ae996ed4fd8bb6b308b9c8708a91df06b}}
+\index{gb.h@{gb.h}!MGB\_TYPE@{MGB\_TYPE}}
+\index{MGB\_TYPE@{MGB\_TYPE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MGB\_TYPE}{MGB\_TYPE}}
+{\footnotesize\ttfamily \#define M\+G\+B\+\_\+\+T\+Y\+PE~0x\+FF}
+
+Hardware Model\+: Pocket GB or Super GB 2. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}\label{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}}
+\index{gb.h@{gb.h}!CGB\_TYPE@{CGB\_TYPE}}
+\index{CGB\_TYPE@{CGB\_TYPE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{CGB\_TYPE}{CGB\_TYPE}}
+{\footnotesize\ttfamily \#define C\+G\+B\+\_\+\+T\+Y\+PE~0x11}
+
+Hardware Model\+: Color GB. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa311f84dd9fce6e136ba4881e7b0d98d}\label{gb_8h_aa311f84dd9fce6e136ba4881e7b0d98d}}
+\index{gb.h@{gb.h}!GBA\_NOT\_DETECTED@{GBA\_NOT\_DETECTED}}
+\index{GBA\_NOT\_DETECTED@{GBA\_NOT\_DETECTED}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{GBA\_NOT\_DETECTED}{GBA\_NOT\_DETECTED}}
+{\footnotesize\ttfamily \#define G\+B\+A\+\_\+\+N\+O\+T\+\_\+\+D\+E\+T\+E\+C\+T\+ED~0x00}
+
+Hardware Model\+: D\+MG, C\+GB or M\+GB. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}, \mbox{\hyperlink{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}{\+\_\+is\+\_\+\+G\+BA}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a6ccf5d0f34fb0af0b6e73b9df0ccd745}\label{gb_8h_a6ccf5d0f34fb0af0b6e73b9df0ccd745}}
+\index{gb.h@{gb.h}!GBA\_DETECTED@{GBA\_DETECTED}}
+\index{GBA\_DETECTED@{GBA\_DETECTED}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{GBA\_DETECTED}{GBA\_DETECTED}}
+{\footnotesize\ttfamily \#define G\+B\+A\+\_\+\+D\+E\+T\+E\+C\+T\+ED~0x01}
+
+Hardware Model\+: G\+BA. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}, \mbox{\hyperlink{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}{\+\_\+is\+\_\+\+G\+BA}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a231ec05679809190782e61c6e8aaaba4}\label{gb_8h_a231ec05679809190782e61c6e8aaaba4}}
+\index{gb.h@{gb.h}!DEVICE\_SUPPORTS\_COLOR@{DEVICE\_SUPPORTS\_COLOR}}
+\index{DEVICE\_SUPPORTS\_COLOR@{DEVICE\_SUPPORTS\_COLOR}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SUPPORTS\_COLOR}{DEVICE\_SUPPORTS\_COLOR}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+U\+P\+P\+O\+R\+T\+S\+\_\+\+C\+O\+L\+OR~(\mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}})}
+
+Macro returns T\+R\+UE if device supports color \mbox{\Hypertarget{gb_8h_a268cc6c704e16f3fa02dd1cf0e17070a}\label{gb_8h_a268cc6c704e16f3fa02dd1cf0e17070a}}
+\index{gb.h@{gb.h}!IO\_IDLE@{IO\_IDLE}}
+\index{IO\_IDLE@{IO\_IDLE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{IO\_IDLE}{IO\_IDLE}}
+{\footnotesize\ttfamily \#define I\+O\+\_\+\+I\+D\+LE~0x00U}
+
+Serial Link IO is completed \mbox{\Hypertarget{gb_8h_ab69a3f7cd2c6b5eb4f518aefee099007}\label{gb_8h_ab69a3f7cd2c6b5eb4f518aefee099007}}
+\index{gb.h@{gb.h}!IO\_SENDING@{IO\_SENDING}}
+\index{IO\_SENDING@{IO\_SENDING}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{IO\_SENDING}{IO\_SENDING}}
+{\footnotesize\ttfamily \#define I\+O\+\_\+\+S\+E\+N\+D\+I\+NG~0x01U}
+
+Serial Link Sending data \mbox{\Hypertarget{gb_8h_aee03efddee0f2f6fbcaec789301aaa9b}\label{gb_8h_aee03efddee0f2f6fbcaec789301aaa9b}}
+\index{gb.h@{gb.h}!IO\_RECEIVING@{IO\_RECEIVING}}
+\index{IO\_RECEIVING@{IO\_RECEIVING}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{IO\_RECEIVING}{IO\_RECEIVING}}
+{\footnotesize\ttfamily \#define I\+O\+\_\+\+R\+E\+C\+E\+I\+V\+I\+NG~0x02U}
+
+Serial Link Receiving data \mbox{\Hypertarget{gb_8h_a5d4c9c7b61a0326a939f9109f96d7423}\label{gb_8h_a5d4c9c7b61a0326a939f9109f96d7423}}
+\index{gb.h@{gb.h}!IO\_ERROR@{IO\_ERROR}}
+\index{IO\_ERROR@{IO\_ERROR}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{IO\_ERROR}{IO\_ERROR}}
+{\footnotesize\ttfamily \#define I\+O\+\_\+\+E\+R\+R\+OR~0x04U}
+
+Serial Link Error \mbox{\Hypertarget{gb_8h_ae042588f20bf5a2349c8ad8716245233}\label{gb_8h_ae042588f20bf5a2349c8ad8716245233}}
+\index{gb.h@{gb.h}!CURRENT\_BANK@{CURRENT\_BANK}}
+\index{CURRENT\_BANK@{CURRENT\_BANK}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{CURRENT\_BANK}{CURRENT\_BANK}}
+{\footnotesize\ttfamily \#define C\+U\+R\+R\+E\+N\+T\+\_\+\+B\+A\+NK~\mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}}}
+
+\mbox{\Hypertarget{gb_8h_a42705001e2b9897f5167b67fb36c69dd}\label{gb_8h_a42705001e2b9897f5167b67fb36c69dd}}
+\index{gb.h@{gb.h}!BANK@{BANK}}
+\index{BANK@{BANK}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{BANK}{BANK}}
+{\footnotesize\ttfamily \#define B\+A\+NK(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )}
+
+Obtains the {\bfseries{bank number}} of V\+A\+R\+N\+A\+ME
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable which has a \+\_\+\+\_\+bank\+\_\+\+V\+A\+R\+N\+A\+ME companion symbol which is adjusted by bankpack\\
+\hline
+\end{DoxyParams}
+Use this to obtain the bank number from a bank reference created with \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}}, \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a086293f2afb4c7945460a4496b20aea3}\label{gb_8h_a086293f2afb4c7945460a4496b20aea3}}
+\index{gb.h@{gb.h}!BANKREF@{BANKREF}}
+\index{BANKREF@{BANKREF}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{BANKREF}{BANKREF}}
+{\footnotesize\ttfamily \#define B\+A\+N\+K\+R\+EF(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{keywordtype}{void} \_\_func\_ \#\# VARNAME() \_\_banked \_\_naked \{ \(\backslash\)}
+\DoxyCodeLine{\_\_asm \(\backslash\)}
+\DoxyCodeLine{ .local b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ \_\_\_bank\_ \#\# VARNAME = b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ .globl \_\_\_bank\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{\_\_endasm; \(\backslash\)}
+\DoxyCodeLine{\}}
+
+\end{DoxyCode}
+Creates a reference for retrieving the bank number of a variable or function
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Variable name to use, which may be an existing identifier\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}} for obtaining the bank number of the included data.
+\end{DoxySeeAlso}
+More than one {\ttfamily \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}} may be created per file, but each call should always use a unique V\+A\+R\+N\+A\+ME.
+
+Use \mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}} within another source file to make the variable and it\textquotesingle{}s data accesible there. \mbox{\Hypertarget{gb_8h_a261bba55a07b802baf99346feadd9852}\label{gb_8h_a261bba55a07b802baf99346feadd9852}}
+\index{gb.h@{gb.h}!BANKREF\_EXTERN@{BANKREF\_EXTERN}}
+\index{BANKREF\_EXTERN@{BANKREF\_EXTERN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{BANKREF\_EXTERN}{BANKREF\_EXTERN}}
+{\footnotesize\ttfamily \#define B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+RN(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~extern const void \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME;}
+
+Creates extern references for accessing a \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}} generated variable.
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable used with \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}\\
+\hline
+\end{DoxyParams}
+This makes a \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}} reference in another source file accessible in the current file for use with \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}, \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a3fca2d0a22aa2717e62fed659caf4743}\label{gb_8h_a3fca2d0a22aa2717e62fed659caf4743}}
+\index{gb.h@{gb.h}!SWITCH\_ROM\_MEGADUCK@{SWITCH\_ROM\_MEGADUCK}}
+\index{SWITCH\_ROM\_MEGADUCK@{SWITCH\_ROM\_MEGADUCK}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM\_MEGADUCK}{SWITCH\_ROM\_MEGADUCK}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+E\+G\+A\+D\+U\+CK(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~ \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}), $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0001 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Makes M\+E\+G\+A\+D\+U\+CK M\+BC switch the active R\+OM bank
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}\label{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}}
+\index{gb.h@{gb.h}!SWITCH\_ROM\_MBC1@{SWITCH\_ROM\_MBC1}}
+\index{SWITCH\_ROM\_MBC1@{SWITCH\_ROM\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM\_MBC1}{SWITCH\_ROM\_MBC1}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~ \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}} = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}), $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x2000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Makes M\+B\+C1 and other compatible M\+B\+Cs switch the active R\+OM bank
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}\label{gb_8h_a1e22a3b60368bb5f3705d625ac2d09cc}}
+\index{gb.h@{gb.h}!SWITCH\_ROM@{SWITCH\_ROM}}
+\index{SWITCH\_ROM@{SWITCH\_ROM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM}{SWITCH\_ROM}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+OM~\mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1}}}
+
+Makes default platform M\+BC switch the active R\+OM bank
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to (max 255)\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1}}, \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5}}, \mbox{\hyperlink{gb_8h_a3fca2d0a22aa2717e62fed659caf4743}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+E\+G\+A\+D\+U\+CK}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}\label{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}}
+\index{gb.h@{gb.h}!SWITCH\_RAM\_MBC1@{SWITCH\_RAM\_MBC1}}
+\index{SWITCH\_RAM\_MBC1@{SWITCH\_RAM\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_RAM\_MBC1}{SWITCH\_RAM\_MBC1}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x4000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Switches S\+R\+AM bank on M\+B\+C1 and other compaticle M\+B\+Cs
+\begin{DoxyParams}{Parameters}
+{\em b} & S\+R\+AM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a6e40dcc763efd953181c7400642a9f69}\label{gb_8h_a6e40dcc763efd953181c7400642a9f69}}
+\index{gb.h@{gb.h}!SWITCH\_RAM@{SWITCH\_RAM}}
+\index{SWITCH\_RAM@{SWITCH\_RAM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_RAM}{SWITCH\_RAM}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+AM~\mbox{\hyperlink{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}}
+
+Switches S\+R\+AM bank on M\+B\+C1 and other compaticle M\+B\+Cs
+\begin{DoxyParams}{Parameters}
+{\em b} & S\+R\+AM bank to switch to\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a38ea3e4dfe02b8eae70df27f39d4a951}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}, \mbox{\hyperlink{gb_8h_a361d5055a7ae880fc1c9d6e0d1164fd6}{S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae202f64307ec00f6970ef9225e54646c}\label{gb_8h_ae202f64307ec00f6970ef9225e54646c}}
+\index{gb.h@{gb.h}!ENABLE\_RAM\_MBC1@{ENABLE\_RAM\_MBC1}}
+\index{ENABLE\_RAM\_MBC1@{ENABLE\_RAM\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_RAM\_MBC1}{ENABLE\_RAM\_MBC1}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x0A}
+
+Enables S\+R\+AM on M\+B\+C1 \mbox{\Hypertarget{gb_8h_a0e9c88657beaac946231a4801481b97f}\label{gb_8h_a0e9c88657beaac946231a4801481b97f}}
+\index{gb.h@{gb.h}!ENABLE\_RAM@{ENABLE\_RAM}}
+\index{ENABLE\_RAM@{ENABLE\_RAM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_RAM}{ENABLE\_RAM}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+R\+AM~\mbox{\hyperlink{gb_8h_ae202f64307ec00f6970ef9225e54646c}{E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}}
+
+\mbox{\Hypertarget{gb_8h_a177fadce938422926b186a8e42575d1d}\label{gb_8h_a177fadce938422926b186a8e42575d1d}}
+\index{gb.h@{gb.h}!DISABLE\_RAM\_MBC1@{DISABLE\_RAM\_MBC1}}
+\index{DISABLE\_RAM\_MBC1@{DISABLE\_RAM\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_RAM\_MBC1}{DISABLE\_RAM\_MBC1}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x00}
+
+Disables S\+R\+AM on M\+B\+C1 \mbox{\Hypertarget{gb_8h_a649d27b5587de16a66176e03a1b8ebd5}\label{gb_8h_a649d27b5587de16a66176e03a1b8ebd5}}
+\index{gb.h@{gb.h}!DISABLE\_RAM@{DISABLE\_RAM}}
+\index{DISABLE\_RAM@{DISABLE\_RAM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_RAM}{DISABLE\_RAM}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+AM~\mbox{\hyperlink{gb_8h_a177fadce938422926b186a8e42575d1d}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C1}}}
+
+\mbox{\Hypertarget{gb_8h_a0c689c5a814f1c347c4d98f28ed6c7d6}\label{gb_8h_a0c689c5a814f1c347c4d98f28ed6c7d6}}
+\index{gb.h@{gb.h}!SWITCH\_16\_8\_MODE\_MBC1@{SWITCH\_16\_8\_MODE\_MBC1}}
+\index{SWITCH\_16\_8\_MODE\_MBC1@{SWITCH\_16\_8\_MODE\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_16\_8\_MODE\_MBC1}{SWITCH\_16\_8\_MODE\_MBC1}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+16\+\_\+8\+\_\+\+M\+O\+D\+E\+\_\+\+M\+B\+C1~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x6000 = 0x00}
+
+\mbox{\Hypertarget{gb_8h_aa5d64e386a00b373f22ffdc5a152c7ba}\label{gb_8h_aa5d64e386a00b373f22ffdc5a152c7ba}}
+\index{gb.h@{gb.h}!SWITCH\_4\_32\_MODE\_MBC1@{SWITCH\_4\_32\_MODE\_MBC1}}
+\index{SWITCH\_4\_32\_MODE\_MBC1@{SWITCH\_4\_32\_MODE\_MBC1}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_4\_32\_MODE\_MBC1}{SWITCH\_4\_32\_MODE\_MBC1}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+4\+\_\+32\+\_\+\+M\+O\+D\+E\+\_\+\+M\+B\+C1~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x6000 = 0x01}
+
+\mbox{\Hypertarget{gb_8h_a92d040284342702026eb19dab59b586e}\label{gb_8h_a92d040284342702026eb19dab59b586e}}
+\index{gb.h@{gb.h}!SWITCH\_ROM\_MBC5@{SWITCH\_ROM\_MBC5}}
+\index{SWITCH\_ROM\_MBC5@{SWITCH\_ROM\_MBC5}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM\_MBC5}{SWITCH\_ROM\_MBC5}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{ \mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\_current\_bank}} = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}), \(\backslash\)}
+\DoxyCodeLine{ *(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} *)0x3000 = 0, \(\backslash\)}
+\DoxyCodeLine{ *(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} *)0x2000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+\end{DoxyCode}
+Makes M\+B\+C5 switch to the active R\+OM bank; only 4M roms are supported, \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6c15ebc660abd3a978137493ab63ffe9}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5\+\_\+8\+M()}}
+\end{DoxySeeAlso}
+
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to\\
+\hline
+\end{DoxyParams}
+Note the order used here. Writing the other way around on a M\+B\+C1 always selects bank 1 \mbox{\Hypertarget{gb_8h_a6c15ebc660abd3a978137493ab63ffe9}\label{gb_8h_a6c15ebc660abd3a978137493ab63ffe9}}
+\index{gb.h@{gb.h}!SWITCH\_ROM\_MBC5\_8M@{SWITCH\_ROM\_MBC5\_8M}}
+\index{SWITCH\_ROM\_MBC5\_8M@{SWITCH\_ROM\_MBC5\_8M}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM\_MBC5\_8M}{SWITCH\_ROM\_MBC5\_8M}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5\+\_\+8M(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{ *(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} *)0x3000 = ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}})(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}) >> 8), \(\backslash\)}
+\DoxyCodeLine{ *(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} *)0x2000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+\end{DoxyCode}
+Makes M\+B\+C5 to switch the active R\+OM bank; active bank number is not tracked by \+\_\+current\+\_\+bank if you use this macro \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a98b848953a95ce2fff6fda643575d74a}{\+\_\+current\+\_\+bank}}
+\end{DoxySeeAlso}
+
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to\\
+\hline
+\end{DoxyParams}
+Note the order used here. Writing the other way around on a M\+B\+C1 always selects bank 1 \mbox{\Hypertarget{gb_8h_a361d5055a7ae880fc1c9d6e0d1164fd6}\label{gb_8h_a361d5055a7ae880fc1c9d6e0d1164fd6}}
+\index{gb.h@{gb.h}!SWITCH\_RAM\_MBC5@{SWITCH\_RAM\_MBC5}}
+\index{SWITCH\_RAM\_MBC5@{SWITCH\_RAM\_MBC5}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_RAM\_MBC5}{SWITCH\_RAM\_MBC5}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x4000 = (\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Switches S\+R\+AM bank on M\+B\+C5
+\begin{DoxyParams}{Parameters}
+{\em b} & S\+R\+AM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a3f033f00c8d781637f9a665b06750937}\label{gb_8h_a3f033f00c8d781637f9a665b06750937}}
+\index{gb.h@{gb.h}!ENABLE\_RAM\_MBC5@{ENABLE\_RAM\_MBC5}}
+\index{ENABLE\_RAM\_MBC5@{ENABLE\_RAM\_MBC5}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_RAM\_MBC5}{ENABLE\_RAM\_MBC5}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x0A}
+
+Enables S\+R\+AM on M\+B\+C5 \mbox{\Hypertarget{gb_8h_a60191cdfa50ed9b88515f181747eaba2}\label{gb_8h_a60191cdfa50ed9b88515f181747eaba2}}
+\index{gb.h@{gb.h}!DISABLE\_RAM\_MBC5@{DISABLE\_RAM\_MBC5}}
+\index{DISABLE\_RAM\_MBC5@{DISABLE\_RAM\_MBC5}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_RAM\_MBC5}{DISABLE\_RAM\_MBC5}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+A\+M\+\_\+\+M\+B\+C5~ $\ast$(\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$)0x0000 = 0x00}
+
+Disables S\+R\+AM on M\+B\+C5 \mbox{\Hypertarget{gb_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}\label{gb_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}}
+\index{gb.h@{gb.h}!DISPLAY\_ON@{DISPLAY\_ON}}
+\index{DISPLAY\_ON@{DISPLAY\_ON}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISPLAY\_ON}{DISPLAY\_ON}}
+{\footnotesize\ttfamily \#define D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a1491fc03ed7f02e7309cc7b0c48b6c8a}{L\+C\+D\+C\+F\+\_\+\+ON}}}
+
+Turns the display back on. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a04d57683cdd046dfa45e7e56d7c4ec4d}{display\+\_\+off}}, \mbox{\hyperlink{gb_8h_ad2ec9831813c5e7069917aa4455af682}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad2ec9831813c5e7069917aa4455af682}\label{gb_8h_ad2ec9831813c5e7069917aa4455af682}}
+\index{gb.h@{gb.h}!DISPLAY\_OFF@{DISPLAY\_OFF}}
+\index{DISPLAY\_OFF@{DISPLAY\_OFF}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISPLAY\_OFF}{DISPLAY\_OFF}}
+{\footnotesize\ttfamily \#define D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF~ \mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}();}
+
+Turns the display off immediately. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a04d57683cdd046dfa45e7e56d7c4ec4d}{display\+\_\+off}}, \mbox{\hyperlink{gb_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a0659212acd317ccdebc0ecf435df330f}\label{gb_8h_a0659212acd317ccdebc0ecf435df330f}}
+\index{gb.h@{gb.h}!HIDE\_LEFT\_COLUMN@{HIDE\_LEFT\_COLUMN}}
+\index{HIDE\_LEFT\_COLUMN@{HIDE\_LEFT\_COLUMN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_LEFT\_COLUMN}{HIDE\_LEFT\_COLUMN}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}
+
+Does nothing for GB \mbox{\Hypertarget{gb_8h_a5497c2255a9474d397446710189eacbe}\label{gb_8h_a5497c2255a9474d397446710189eacbe}}
+\index{gb.h@{gb.h}!SHOW\_LEFT\_COLUMN@{SHOW\_LEFT\_COLUMN}}
+\index{SHOW\_LEFT\_COLUMN@{SHOW\_LEFT\_COLUMN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_LEFT\_COLUMN}{SHOW\_LEFT\_COLUMN}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}
+
+Does nothing for GB \mbox{\Hypertarget{gb_8h_a8e3f36aa68ac036695816757f2a1322c}\label{gb_8h_a8e3f36aa68ac036695816757f2a1322c}}
+\index{gb.h@{gb.h}!SHOW\_BKG@{SHOW\_BKG}}
+\index{SHOW\_BKG@{SHOW\_BKG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_BKG}{SHOW\_BKG}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+B\+KG~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}{L\+C\+D\+C\+F\+\_\+\+B\+G\+ON}}}
+
+Turns on the background layer. Sets bit 0 of the L\+C\+DC register to 1. \mbox{\Hypertarget{gb_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}\label{gb_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}}
+\index{gb.h@{gb.h}!HIDE\_BKG@{HIDE\_BKG}}
+\index{HIDE\_BKG@{HIDE\_BKG}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_BKG}{HIDE\_BKG}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+B\+KG~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a97ab19d938f05bffbcb4221824c3bfce}{L\+C\+D\+C\+F\+\_\+\+B\+G\+ON}}}
+
+Turns off the background layer. Sets bit 0 of the L\+C\+DC register to 0. \mbox{\Hypertarget{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}\label{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}}
+\index{gb.h@{gb.h}!SHOW\_WIN@{SHOW\_WIN}}
+\index{SHOW\_WIN@{SHOW\_WIN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_WIN}{SHOW\_WIN}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+W\+IN~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}}
+
+Turns on the window layer Sets bit 5 of the L\+C\+DC register to 1. \mbox{\Hypertarget{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}\label{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}}
+\index{gb.h@{gb.h}!HIDE\_WIN@{HIDE\_WIN}}
+\index{HIDE\_WIN@{HIDE\_WIN}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_WIN}{HIDE\_WIN}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+W\+IN~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a13a5f08b9aae68f8fa57a8aa7705b732}{L\+C\+D\+C\+F\+\_\+\+W\+I\+N\+ON}}}
+
+Turns off the window layer. Clears bit 5 of the L\+C\+DC register to 0. \mbox{\Hypertarget{gb_8h_a495bc9f405f916f02ad5d97e6e730134}\label{gb_8h_a495bc9f405f916f02ad5d97e6e730134}}
+\index{gb.h@{gb.h}!SHOW\_SPRITES@{SHOW\_SPRITES}}
+\index{SHOW\_SPRITES@{SHOW\_SPRITES}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_SPRITES}{SHOW\_SPRITES}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+S\+P\+R\+I\+T\+ES~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON}}}
+
+Turns on the sprites layer. Sets bit 1 of the L\+C\+DC register to 1. \mbox{\Hypertarget{gb_8h_a69ef98aee664b8abd8d1a3d45f016dda}\label{gb_8h_a69ef98aee664b8abd8d1a3d45f016dda}}
+\index{gb.h@{gb.h}!HIDE\_SPRITES@{HIDE\_SPRITES}}
+\index{HIDE\_SPRITES@{HIDE\_SPRITES}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_SPRITES}{HIDE\_SPRITES}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+S\+P\+R\+I\+T\+ES~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a6aef42158c90e8025b8341cdea2e3918}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J\+ON}}}
+
+Turns off the sprites layer. Clears bit 1 of the L\+C\+DC register to 0. \mbox{\Hypertarget{gb_8h_af91d252f07f4764996154820f970c101}\label{gb_8h_af91d252f07f4764996154820f970c101}}
+\index{gb.h@{gb.h}!SPRITES\_8x16@{SPRITES\_8x16}}
+\index{SPRITES\_8x16@{SPRITES\_8x16}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SPRITES\_8x16}{SPRITES\_8x16}}
+{\footnotesize\ttfamily \#define S\+P\+R\+I\+T\+E\+S\+\_\+8x16~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}$\vert$=\mbox{\hyperlink{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J16}}}
+
+Sets sprite size to 8x16 pixels, two tiles one above the other. Sets bit 2 of the L\+C\+DC register to 1. \mbox{\Hypertarget{gb_8h_aa87bec0d134136fdb727f52cb773b792}\label{gb_8h_aa87bec0d134136fdb727f52cb773b792}}
+\index{gb.h@{gb.h}!SPRITES\_8x8@{SPRITES\_8x8}}
+\index{SPRITES\_8x8@{SPRITES\_8x8}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SPRITES\_8x8}{SPRITES\_8x8}}
+{\footnotesize\ttfamily \#define S\+P\+R\+I\+T\+E\+S\+\_\+8x8~ \mbox{\hyperlink{gb_2hardware_8h_a6515fdfaa50eeb7e63faeea54f77cd6b}{L\+C\+D\+C\+\_\+\+R\+EG}}\&=$\sim$\mbox{\hyperlink{gb_2hardware_8h_a14eddd3d53d8e649f1754bd455b4863d}{L\+C\+D\+C\+F\+\_\+\+O\+B\+J16}}}
+
+Sets sprite size to 8x8 pixels, one tile. Clears bit 2 of the L\+C\+DC register to 0. \mbox{\Hypertarget{gb_8h_a67f80e65620470b55a4950e2966eb868}\label{gb_8h_a67f80e65620470b55a4950e2966eb868}}
+\index{gb.h@{gb.h}!COMPAT\_PALETTE@{COMPAT\_PALETTE}}
+\index{COMPAT\_PALETTE@{COMPAT\_PALETTE}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{COMPAT\_PALETTE}{COMPAT\_PALETTE}}
+{\footnotesize\ttfamily \#define C\+O\+M\+P\+A\+T\+\_\+\+P\+A\+L\+E\+T\+TE(\begin{DoxyParamCaption}\item[{}]{C0, }\item[{}]{C1, }\item[{}]{C2, }\item[{}]{C3 }\end{DoxyParamCaption})~((\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})(((C3) $<$$<$ 6) $\vert$ ((C2) $<$$<$ 4) $\vert$ ((C1) $<$$<$ 2) $\vert$ (C0)))}
+
+\mbox{\Hypertarget{gb_8h_ab94bfec130df50d9cb808142f94603a5}\label{gb_8h_ab94bfec130df50d9cb808142f94603a5}}
+\index{gb.h@{gb.h}!set\_bkg\_2bpp\_data@{set\_bkg\_2bpp\_data}}
+\index{set\_bkg\_2bpp\_data@{set\_bkg\_2bpp\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_2bpp\_data}{set\_bkg\_2bpp\_data}}
+{\footnotesize\ttfamily \#define set\+\_\+bkg\+\_\+2bpp\+\_\+data~\mbox{\hyperlink{sms_8h_a8130306da1177f4fef89e699f8e2add4}{set\+\_\+bkg\+\_\+data}}}
+
+\mbox{\Hypertarget{gb_8h_a55f82ff980398dd97036fd936ebd727e}\label{gb_8h_a55f82ff980398dd97036fd936ebd727e}}
+\index{gb.h@{gb.h}!set\_tile\_map@{set\_tile\_map}}
+\index{set\_tile\_map@{set\_tile\_map}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_map}{set\_tile\_map}}
+{\footnotesize\ttfamily \#define set\+\_\+tile\+\_\+map~\mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}}
+
+\mbox{\Hypertarget{gb_8h_adb5d0970167b81401113812773c90838}\label{gb_8h_adb5d0970167b81401113812773c90838}}
+\index{gb.h@{gb.h}!set\_tile\_submap@{set\_tile\_submap}}
+\index{set\_tile\_submap@{set\_tile\_submap}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_submap}{set\_tile\_submap}}
+{\footnotesize\ttfamily \#define set\+\_\+tile\+\_\+submap~\mbox{\hyperlink{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}{set\+\_\+bkg\+\_\+submap}}}
+
+\mbox{\Hypertarget{gb_8h_a3b235c526c517fb02d20cdea780ee2c5}\label{gb_8h_a3b235c526c517fb02d20cdea780ee2c5}}
+\index{gb.h@{gb.h}!set\_tile\_xy@{set\_tile\_xy}}
+\index{set\_tile\_xy@{set\_tile\_xy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_xy}{set\_tile\_xy}}
+{\footnotesize\ttfamily \#define set\+\_\+tile\+\_\+xy~\mbox{\hyperlink{gb_8h_a74ee8f0a3495508c90de4ce246b81060}{set\+\_\+bkg\+\_\+tile\+\_\+xy}}}
+
+\mbox{\Hypertarget{gb_8h_a43b4f0ba65856deef626c0d9e7e41ed4}\label{gb_8h_a43b4f0ba65856deef626c0d9e7e41ed4}}
+\index{gb.h@{gb.h}!set\_sprite\_2bpp\_data@{set\_sprite\_2bpp\_data}}
+\index{set\_sprite\_2bpp\_data@{set\_sprite\_2bpp\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_2bpp\_data}{set\_sprite\_2bpp\_data}}
+{\footnotesize\ttfamily \#define set\+\_\+sprite\+\_\+2bpp\+\_\+data~\mbox{\hyperlink{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}{set\+\_\+sprite\+\_\+data}}}
+
+\mbox{\Hypertarget{gb_8h_a47607089a434dcda7a8583cfca03b604}\label{gb_8h_a47607089a434dcda7a8583cfca03b604}}
+\index{gb.h@{gb.h}!DISABLE\_OAM\_DMA@{DISABLE\_OAM\_DMA}}
+\index{DISABLE\_OAM\_DMA@{DISABLE\_OAM\_DMA}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_OAM\_DMA}{DISABLE\_OAM\_DMA}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = 0}
+
+\mbox{\Hypertarget{gb_8h_abfd70bf31185a4900680977c9fb5a5ec}\label{gb_8h_abfd70bf31185a4900680977c9fb5a5ec}}
+\index{gb.h@{gb.h}!DISABLE\_VBL\_TRANSFER@{DISABLE\_VBL\_TRANSFER}}
+\index{DISABLE\_VBL\_TRANSFER@{DISABLE\_VBL\_TRANSFER}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_VBL\_TRANSFER}{DISABLE\_VBL\_TRANSFER}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER~\mbox{\hyperlink{gb_8h_a47607089a434dcda7a8583cfca03b604}{D\+I\+S\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}}
+
+Disable O\+AM D\+MA copy each V\+Blank \mbox{\Hypertarget{gb_8h_a20895d53fe9caacb08ce8b071d57ce53}\label{gb_8h_a20895d53fe9caacb08ce8b071d57ce53}}
+\index{gb.h@{gb.h}!ENABLE\_OAM\_DMA@{ENABLE\_OAM\_DMA}}
+\index{ENABLE\_OAM\_DMA@{ENABLE\_OAM\_DMA}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_OAM\_DMA}{ENABLE\_OAM\_DMA}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})\&\mbox{\hyperlink{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}{shadow\+\_\+\+O\+AM}} $>$$>$ 8)}
+
+\mbox{\Hypertarget{gb_8h_a77d516c9d3f86f100eddea5e0d133a76}\label{gb_8h_a77d516c9d3f86f100eddea5e0d133a76}}
+\index{gb.h@{gb.h}!ENABLE\_VBL\_TRANSFER@{ENABLE\_VBL\_TRANSFER}}
+\index{ENABLE\_VBL\_TRANSFER@{ENABLE\_VBL\_TRANSFER}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_VBL\_TRANSFER}{ENABLE\_VBL\_TRANSFER}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER~\mbox{\hyperlink{gb_8h_a20895d53fe9caacb08ce8b071d57ce53}{E\+N\+A\+B\+L\+E\+\_\+\+O\+A\+M\+\_\+\+D\+MA}}}
+
+Enable O\+AM D\+MA copy each V\+Blank and set it to transfer default shadow\+\_\+\+O\+AM array \mbox{\Hypertarget{gb_8h_a8b77608c87a9aef65a03531482b2163b}\label{gb_8h_a8b77608c87a9aef65a03531482b2163b}}
+\index{gb.h@{gb.h}!MAX\_HARDWARE\_SPRITES@{MAX\_HARDWARE\_SPRITES}}
+\index{MAX\_HARDWARE\_SPRITES@{MAX\_HARDWARE\_SPRITES}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{MAX\_HARDWARE\_SPRITES}{MAX\_HARDWARE\_SPRITES}}
+{\footnotesize\ttfamily \#define M\+A\+X\+\_\+\+H\+A\+R\+D\+W\+A\+R\+E\+\_\+\+S\+P\+R\+I\+T\+ES~40}
+
+Amount of hardware sprites in O\+AM \mbox{\Hypertarget{gb_8h_a47865835d7d007d71b4bc8ae5cefb73a}\label{gb_8h_a47865835d7d007d71b4bc8ae5cefb73a}}
+\index{gb.h@{gb.h}!fill\_rect@{fill\_rect}}
+\index{fill\_rect@{fill\_rect}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{fill\_rect}{fill\_rect}}
+{\footnotesize\ttfamily \#define fill\+\_\+rect~\mbox{\hyperlink{gb_8h_a74c3f53fca019f7abcd1270650808849}{fill\+\_\+bkg\+\_\+rect}}}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{gb_8h_a9508f919d9482d1d51534ccac212454d}\label{gb_8h_a9508f919d9482d1d51534ccac212454d}}
+\index{gb.h@{gb.h}!int\_handler@{int\_handler}}
+\index{int\_handler@{int\_handler}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{int\_handler}{int\_handler}}
+{\footnotesize\ttfamily typedef void($\ast$ int\+\_\+handler) (void) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}}
+
+Interrupt handlers \mbox{\Hypertarget{gb_8h_a8e5ea12b86bdfc812448c2f5c4336c03}\label{gb_8h_a8e5ea12b86bdfc812448c2f5c4336c03}}
+\index{gb.h@{gb.h}!OAM\_item\_t@{OAM\_item\_t}}
+\index{OAM\_item\_t@{OAM\_item\_t}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{OAM\_item\_t}{OAM\_item\_t}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}} \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}}}
+
+Sprite Attributes structure
+\begin{DoxyParams}{Parameters}
+{\em x} & X Coordinate of the sprite on screen \\
+\hline
+{\em y} & Y Coordinate of the sprite on screen \\
+\hline
+{\em tile} & Sprite tile number (see \mbox{\hyperlink{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}}) \\
+\hline
+{\em prop} & O\+AM Property Flags (see \mbox{\hyperlink{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}}) \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}\label{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}}
+\index{gb.h@{gb.h}!remove\_VBL@{remove\_VBL}}
+\index{remove\_VBL@{remove\_VBL}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{remove\_VBL()}{remove\_VBL()}}
+{\footnotesize\ttfamily void remove\+\_\+\+V\+BL (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+The remove functions will remove any interrupt handler.
+
+A handler of N\+U\+LL will cause bad things to happen if the given interrupt is enabled.
+
+Removes the V\+BL interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+Removes the V\+BL interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a32683767caa2a263a1f494b3605786e7}\label{gb_8h_a32683767caa2a263a1f494b3605786e7}}
+\index{gb.h@{gb.h}!remove\_LCD@{remove\_LCD}}
+\index{remove\_LCD@{remove\_LCD}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{remove\_LCD()}{remove\_LCD()}}
+{\footnotesize\ttfamily void remove\+\_\+\+L\+CD (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the L\+CD interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a9f9f77105099a34556247d5bb03368d1}{add\+\_\+\+L\+C\+D()}}, \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a142f6c7755fce8b1148faf658d8ec147}\label{gb_8h_a142f6c7755fce8b1148faf658d8ec147}}
+\index{gb.h@{gb.h}!remove\_TIM@{remove\_TIM}}
+\index{remove\_TIM@{remove\_TIM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{remove\_TIM()}{remove\_TIM()}}
+{\footnotesize\ttfamily void remove\+\_\+\+T\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the T\+IM interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a028d1a2e820951bb4f103d6469975ffb}{add\+\_\+\+T\+I\+M()}}, \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a5b821b31215361265d8b7894a9ae7118}\label{gb_8h_a5b821b31215361265d8b7894a9ae7118}}
+\index{gb.h@{gb.h}!remove\_SIO@{remove\_SIO}}
+\index{remove\_SIO@{remove\_SIO}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{remove\_SIO()}{remove\_SIO()}}
+{\footnotesize\ttfamily void remove\+\_\+\+S\+IO (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the Serial Link / S\+IO interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}},
+
+\mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+The default S\+IO I\+SR gets installed automatically if any of the standard S\+IO calls are used. These calls include \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte()}}, \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte()}}.
+
+The default S\+IO I\+SR cannot be removed once installed. Only secondary chained S\+IO I\+S\+Rs (added with \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}} ) can be removed. \mbox{\Hypertarget{gb_8h_a4a3e87e0917d5efb6bc7c94e9754fcd0}\label{gb_8h_a4a3e87e0917d5efb6bc7c94e9754fcd0}}
+\index{gb.h@{gb.h}!remove\_JOY@{remove\_JOY}}
+\index{remove\_JOY@{remove\_JOY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{remove\_JOY()}{remove\_JOY()}}
+{\footnotesize\ttfamily void remove\+\_\+\+J\+OY (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the J\+OY interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}{add\+\_\+\+J\+O\+Y()}}, \mbox{\hyperlink{gb_8h_ad43fdfdb1e157b141f3fc48b78bf4386}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a0d29659d08708143dd8bc720278e06b5}\label{gb_8h_a0d29659d08708143dd8bc720278e06b5}}
+\index{gb.h@{gb.h}!add\_VBL@{add\_VBL}}
+\index{add\_VBL@{add\_VBL}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_VBL()}{add\_VBL()}}
+{\footnotesize\ttfamily void add\+\_\+\+V\+BL (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a V-\/blank interrupt handler.
+
+
+\begin{DoxyParams}{Parameters}
+{\em h} & The handler to be called whenever a V-\/blank interrupt occurs.\\
+\hline
+\end{DoxyParams}
+Up to 4 handlers may be added, with the last added being called last. If the \mbox{\hyperlink{sms_8h_a98f7ef49e1758c601979bcb0ff19a1f0}{remove\+\_\+\+V\+BL}} function is to be called, only three may be added.
+
+Do not use \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}} and \mbox{\hyperlink{asm_2types_8h_ac950c0db046e2f86d15e7ae1f558b017}{I\+N\+T\+E\+R\+R\+U\+PT}} attributes for a function added via \mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+B\+L()}} (or L\+CD, etc). The attributes are only required when constructing a bare jump from the interrupt vector itself.
+
+Note\+: The default V\+BL is installed automatically.
+
+Adds a V-\/blank interrupt handler. \mbox{\Hypertarget{gb_8h_a9f9f77105099a34556247d5bb03368d1}\label{gb_8h_a9f9f77105099a34556247d5bb03368d1}}
+\index{gb.h@{gb.h}!add\_LCD@{add\_LCD}}
+\index{add\_LCD@{add\_LCD}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_LCD()}{add\_LCD()}}
+{\footnotesize\ttfamily void add\+\_\+\+L\+CD (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a L\+CD interrupt handler.
+
+Called when the L\+CD interrupt occurs, which is normally when \mbox{\hyperlink{gb_2hardware_8h_aeb643bd4eac2e6e410cae2fae677c0a7}{L\+Y\+\_\+\+R\+EG}} == \mbox{\hyperlink{gb_2hardware_8h_a591084a506c33266b7d6cc3b4b8936ae}{L\+Y\+C\+\_\+\+R\+EG}}.
+
+There are various reasons for this interrupt to occur as described by the \mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} register (\$\+F\+F41). One very popular reason is to indicate to the user when the video hardware is about to redraw a given L\+CD line. This can be useful for dynamically controlling the \mbox{\hyperlink{gb_2hardware_8h_a86cc170585319565195f2c163250be1f}{S\+C\+X\+\_\+\+R\+EG}} / \mbox{\hyperlink{gb_2hardware_8h_a244b162cf13bbcb4fe842d7e298b39c2}{S\+C\+Y\+\_\+\+R\+EG}} registers (\$\+F\+F43/\$\+F\+F42) to perform special video effects.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+BL}}
+\end{DoxySeeAlso}
+Adds a L\+CD interrupt handler. \mbox{\Hypertarget{gb_8h_a028d1a2e820951bb4f103d6469975ffb}\label{gb_8h_a028d1a2e820951bb4f103d6469975ffb}}
+\index{gb.h@{gb.h}!add\_TIM@{add\_TIM}}
+\index{add\_TIM@{add\_TIM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_TIM()}{add\_TIM()}}
+{\footnotesize\ttfamily void add\+\_\+\+T\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a timer interrupt handler.
+
+Can not be used together with \mbox{\hyperlink{gb_8h_a970f18857533e062f4780f6e1c407d69}{add\+\_\+low\+\_\+priority\+\_\+\+T\+IM}}
+
+This interrupt occurs when the \mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}} register (\$\+F\+F05) changes from \$\+FF to \$00.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+BL}}
+
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} with \mbox{\hyperlink{gb_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a970f18857533e062f4780f6e1c407d69}\label{gb_8h_a970f18857533e062f4780f6e1c407d69}}
+\index{gb.h@{gb.h}!add\_low\_priority\_TIM@{add\_low\_priority\_TIM}}
+\index{add\_low\_priority\_TIM@{add\_low\_priority\_TIM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_low\_priority\_TIM()}{add\_low\_priority\_TIM()}}
+{\footnotesize\ttfamily void add\+\_\+low\+\_\+priority\+\_\+\+T\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a timer interrupt handler, that could be interrupted by the other interrupts, as well as itself, if it runs too slow.
+
+Can not be used together with \mbox{\hyperlink{sms_8h_a6c66a583a8f0744e3985c89725e3dc10}{add\+\_\+\+T\+IM}}
+
+This interrupt occurs when the \mbox{\hyperlink{gb_2hardware_8h_a9d295bb437953de5ebcb3c12d65743aa}{T\+I\+M\+A\+\_\+\+R\+EG}} register (\$\+F\+F05) changes from \$\+FF to \$00.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+BL}}
+
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} with \mbox{\hyperlink{gb_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa82422752016328ed0765879e286019f}\label{gb_8h_aa82422752016328ed0765879e286019f}}
+\index{gb.h@{gb.h}!add\_SIO@{add\_SIO}}
+\index{add\_SIO@{add\_SIO}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_SIO()}{add\_SIO()}}
+{\footnotesize\ttfamily void add\+\_\+\+S\+IO (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a Serial Link transmit complete interrupt handler.
+
+This interrupt occurs when a serial transfer has completed on the game link port.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte}}, \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte()}}, \mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+B\+L()}}
+
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} with \mbox{\hyperlink{gb_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}\label{gb_8h_aa2f0235e78da2d1d94d3628d7a1afc30}}
+\index{gb.h@{gb.h}!add\_JOY@{add\_JOY}}
+\index{add\_JOY@{add\_JOY}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{add\_JOY()}{add\_JOY()}}
+{\footnotesize\ttfamily void add\+\_\+\+J\+OY (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a joypad button change interrupt handler.
+
+This interrupt occurs on a transition of any of the keypad input lines from high to low. Due to the fact that keypad \char`\"{}bounce\char`\"{} is virtually always present, software should expect this interrupt to occur one or more times for every button press and one or more times for every button release.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}}, \mbox{\hyperlink{gb_8h_a0d29659d08708143dd8bc720278e06b5}{add\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}\label{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}}
+\index{gb.h@{gb.h}!nowait\_int\_handler@{nowait\_int\_handler}}
+\index{nowait\_int\_handler@{nowait\_int\_handler}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{nowait\_int\_handler()}{nowait\_int\_handler()}}
+{\footnotesize\ttfamily void nowait\+\_\+int\+\_\+handler (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Interrupt handler chain terminator that does {\bfseries{not}} wait for .S\+T\+AT
+
+You must add this handler last in every interrupt handler chain if you want to change the default interrupt handler behaviour that waits for L\+CD controller mode to become 1 or 0 before return from the interrupt.
+
+Example\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{CRITICAL}} \{}
+\DoxyCodeLine{ \mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\_SIO}}(\mbox{\hyperlink{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}{nowait\_int\_handler}}); \textcolor{comment}{// Disable wait on VRAM state before returning from SIO interrupt}}
+\DoxyCodeLine{\}}
+\end{DoxyCode}
+ \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_acc9afd0cb72e763a1213d256b942a68f}{wait\+\_\+int\+\_\+handler()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_acc9afd0cb72e763a1213d256b942a68f}\label{gb_8h_acc9afd0cb72e763a1213d256b942a68f}}
+\index{gb.h@{gb.h}!wait\_int\_handler@{wait\_int\_handler}}
+\index{wait\_int\_handler@{wait\_int\_handler}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{wait\_int\_handler()}{wait\_int\_handler()}}
+{\footnotesize\ttfamily void wait\+\_\+int\+\_\+handler (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Default Interrupt handler chain terminator that waits for \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2hardware_8h_ad40ebf3b29add46cdd310a7e0802bc6b}{S\+T\+A\+T\+\_\+\+R\+EG}} and {\bfseries{only}} returns at the B\+E\+G\+I\+N\+N\+I\+NG of either Mode 0 or Mode 1.
+\end{DoxySeeAlso}
+Used by default at the end of interrupt chains to help prevent graphical glitches. The glitches are caused when an I\+SR interrupts a graphics operation in one mode but returns in a different mode for which that graphics operation is not allowed.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a695c6d0e8fd7cf11dae0d4c67bc058f9}{nowait\+\_\+int\+\_\+handler()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ade5d4c955b871b0ed884273cc2b7215a}\label{gb_8h_ade5d4c955b871b0ed884273cc2b7215a}}
+\index{gb.h@{gb.h}!cancel\_pending\_interrupts@{cancel\_pending\_interrupts}}
+\index{cancel\_pending\_interrupts@{cancel\_pending\_interrupts}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{cancel\_pending\_interrupts()}{cancel\_pending\_interrupts()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} cancel\+\_\+pending\+\_\+interrupts (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Cancel pending interrupts \mbox{\Hypertarget{gb_8h_a3ea524204d839377cf39842eec23e202}\label{gb_8h_a3ea524204d839377cf39842eec23e202}}
+\index{gb.h@{gb.h}!mode@{mode}}
+\index{mode@{mode}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{mode()}{mode()}}
+{\footnotesize\ttfamily void mode (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{m }\end{DoxyParamCaption})}
+
+Set the current screen mode -\/ one of M\+\_\+$\ast$ modes
+
+Normally used by internal functions only.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}{M\+\_\+\+D\+R\+A\+W\+I\+NG}}, \mbox{\hyperlink{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}, \mbox{\hyperlink{gb_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}, \mbox{\hyperlink{gb_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}, \mbox{\hyperlink{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a19969b36a6535fc6a966c0e5476baf9c}\label{gb_8h_a19969b36a6535fc6a966c0e5476baf9c}}
+\index{gb.h@{gb.h}!get\_mode@{get\_mode}}
+\index{get\_mode@{get\_mode}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_mode()}{get\_mode()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns the current mode
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}{M\+\_\+\+D\+R\+A\+W\+I\+NG}}, \mbox{\hyperlink{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}, \mbox{\hyperlink{gb_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}, \mbox{\hyperlink{gb_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}, \mbox{\hyperlink{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}\label{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}}
+\index{gb.h@{gb.h}!send\_byte@{send\_byte}}
+\index{send\_byte@{send\_byte}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{send\_byte()}{send\_byte()}}
+{\footnotesize\ttfamily void send\+\_\+byte (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Serial Link\+: Send the byte in \mbox{\hyperlink{gb_8h_acae13736da20f9fc53e8d38934aa2119}{\+\_\+io\+\_\+out}} out through the serial port
+
+Make sure to enable interrupts for the Serial Link before trying to transfer data. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+I\+O()}}
+
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} with \mbox{\hyperlink{sms_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}\label{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}}
+\index{gb.h@{gb.h}!receive\_byte@{receive\_byte}}
+\index{receive\_byte@{receive\_byte}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{receive\_byte()}{receive\_byte()}}
+{\footnotesize\ttfamily void receive\+\_\+byte (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Serial Link\+: Receive a byte from the serial port into \mbox{\hyperlink{gb_8h_a02f3a1585ae654444e628c1aa98ef0cf}{\+\_\+io\+\_\+in}}
+
+Make sure to enable interrupts for the Serial Link before trying to transfer data. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa82422752016328ed0765879e286019f}{add\+\_\+\+S\+I\+O()}}, \mbox{\hyperlink{gb_8h_a5b821b31215361265d8b7894a9ae7118}{remove\+\_\+\+S\+I\+O()}}
+
+\mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts()}} with \mbox{\hyperlink{sms_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a2afae202a1f8ca59a12a6455bb909c5d}\label{gb_8h_a2afae202a1f8ca59a12a6455bb909c5d}}
+\index{gb.h@{gb.h}!delay@{delay}}
+\index{delay@{delay}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{delay()}{delay()}}
+{\footnotesize\ttfamily void delay (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{d }\end{DoxyParamCaption})}
+
+Delays the given number of milliseconds. Uses no timers or interrupts, and can be called with interrupts disabled \mbox{\Hypertarget{gb_8h_a176c477d759b814664785f3a0ad5e253}\label{gb_8h_a176c477d759b814664785f3a0ad5e253}}
+\index{gb.h@{gb.h}!joypad@{joypad}}
+\index{joypad@{joypad}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{joypad()}{joypad()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypad (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Reads and returns the current state of the joypad. Follows Nintendo\textquotesingle{}s guidelines for reading the pad. Return value is an OR of J\+\_\+$\ast$
+
+When testing for multiple different buttons, it\textquotesingle{}s best to read the joypad state {\itshape once} into a variable and then test using that variable.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab769c6e20778298be8bc3321476ceb53}{J\+\_\+\+S\+T\+A\+RT}}, \mbox{\hyperlink{gb_8h_ab416a9d96d1582490828f4bac78a8b5b}{J\+\_\+\+S\+E\+L\+E\+CT}}, \mbox{\hyperlink{gb_8h_a31af766e3b598eb7a6b63f55a4988e7a}{J\+\_\+A}}, \mbox{\hyperlink{gb_8h_ae47e59a309120f9420993f26816b5e6d}{J\+\_\+B}}, \mbox{\hyperlink{gb_8h_a05ca817ab32f6da612c3ae26db5abf02}{J\+\_\+\+UP}}, \mbox{\hyperlink{gb_8h_ae032c5c544196e37ec0432f6cfad7904}{J\+\_\+\+D\+O\+WN}}, \mbox{\hyperlink{gb_8h_ac70894fecac30c1ca9917f07373cf81c}{J\+\_\+\+L\+E\+FT}}, \mbox{\hyperlink{gb_8h_a3bad91d11ae09ffcbb3cb0a81873d325}{J\+\_\+\+R\+I\+G\+HT}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aae433db7d8e3ee4c095c254b8abd7b8b}\label{gb_8h_aae433db7d8e3ee4c095c254b8abd7b8b}}
+\index{gb.h@{gb.h}!waitpad@{waitpad}}
+\index{waitpad@{waitpad}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{waitpad()}{waitpad()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} waitpad (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{mask }\end{DoxyParamCaption})}
+
+Waits until at least one of the buttons given in mask are pressed.
+
+
+\begin{DoxyParams}{Parameters}
+{\em mask} & Bitmask indicating which buttons to wait for\\
+\hline
+\end{DoxyParams}
+Normally only used for checking one key, but it will support many, even J\+\_\+\+L\+E\+FT at the same time as J\+\_\+\+R\+I\+G\+HT. \+:)
+
+Note\+: Checks in a loop that doesn\textquotesingle{}t H\+A\+LT at all, so the C\+PU will be maxed out until this call returns. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad}}
+
+\mbox{\hyperlink{gb_8h_ab769c6e20778298be8bc3321476ceb53}{J\+\_\+\+S\+T\+A\+RT}}, \mbox{\hyperlink{gb_8h_ab416a9d96d1582490828f4bac78a8b5b}{J\+\_\+\+S\+E\+L\+E\+CT}}, \mbox{\hyperlink{gb_8h_a31af766e3b598eb7a6b63f55a4988e7a}{J\+\_\+A}}, \mbox{\hyperlink{gb_8h_ae47e59a309120f9420993f26816b5e6d}{J\+\_\+B}}, \mbox{\hyperlink{gb_8h_a05ca817ab32f6da612c3ae26db5abf02}{J\+\_\+\+UP}}, \mbox{\hyperlink{gb_8h_ae032c5c544196e37ec0432f6cfad7904}{J\+\_\+\+D\+O\+WN}}, \mbox{\hyperlink{gb_8h_ac70894fecac30c1ca9917f07373cf81c}{J\+\_\+\+L\+E\+FT}}, \mbox{\hyperlink{gb_8h_a3bad91d11ae09ffcbb3cb0a81873d325}{J\+\_\+\+R\+I\+G\+HT}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a8484d346b788309ac702b7e0b1fca730}\label{gb_8h_a8484d346b788309ac702b7e0b1fca730}}
+\index{gb.h@{gb.h}!waitpadup@{waitpadup}}
+\index{waitpadup@{waitpadup}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{waitpadup()}{waitpadup()}}
+{\footnotesize\ttfamily void waitpadup (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Waits for the directional pad and all buttons to be released.
+
+Note\+: Checks in a loop that doesn\textquotesingle{}t H\+A\+LT at all, so the C\+PU will be maxed out until this call returns. \mbox{\Hypertarget{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}\label{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}}
+\index{gb.h@{gb.h}!joypad\_init@{joypad\_init}}
+\index{joypad\_init@{joypad\_init}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{joypad\_init()}{joypad\_init()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypad\+\_\+init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{npads, }\item[{\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$}]{joypads }\end{DoxyParamCaption})}
+
+Initializes \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure for polling multiple joypads (for the GB and ones connected via S\+GB)
+\begin{DoxyParams}{Parameters}
+{\em npads} & number of joypads requested (1, 2 or 4) \\
+\hline
+{\em joypads} & pointer to \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure to be initialized\\
+\hline
+\end{DoxyParams}
+Only required for \mbox{\hyperlink{sms_8h_a1d45c65829490c5ec98362f5e60edc20}{joypad\+\_\+ex}}, not required for calls to regular \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}} \begin{DoxyReturn}{Returns}
+number of joypads avaliable
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}{joypad\+\_\+ex()}}, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}\label{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}}
+\index{gb.h@{gb.h}!joypad\_ex@{joypad\_ex}}
+\index{joypad\_ex@{joypad\_ex}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{joypad\_ex()}{joypad\_ex()}}
+{\footnotesize\ttfamily void joypad\+\_\+ex (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$}]{joypads }\end{DoxyParamCaption})}
+
+Polls all avaliable joypads (for the GB and ones connected via S\+GB)
+\begin{DoxyParams}{Parameters}
+{\em joypads} & pointer to \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure to be filled with joypad statuses, must be previously initialized with \mbox{\hyperlink{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}{joypad\+\_\+init()}}\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}{joypad\+\_\+init()}}, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}\label{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}}
+\index{gb.h@{gb.h}!enable\_interrupts@{enable\_interrupts}}
+\index{enable\_interrupts@{enable\_interrupts}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{enable\_interrupts()}{enable\_interrupts()}}
+{\footnotesize\ttfamily void enable\+\_\+interrupts (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Enables unmasked interrupts
+
+\begin{DoxyNote}{Note}
+Use \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}} \{...\} instead for creating a block of of code which should execute with interrupts temporarily turned off.
+\end{DoxyNote}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ad77796783b3a601b6f3781dfc3983499}{disable\+\_\+interrupts}}, \mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts}}, \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad77796783b3a601b6f3781dfc3983499}\label{gb_8h_ad77796783b3a601b6f3781dfc3983499}}
+\index{gb.h@{gb.h}!disable\_interrupts@{disable\_interrupts}}
+\index{disable\_interrupts@{disable\_interrupts}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{disable\_interrupts()}{disable\_interrupts()}}
+{\footnotesize\ttfamily void disable\+\_\+interrupts (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Disables interrupts
+
+\begin{DoxyNote}{Note}
+Use \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}} \{...\} instead for creating a block of of code which should execute with interrupts temporarily turned off.
+\end{DoxyNote}
+This function may be called as many times as you like; however the first call to \mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts}} will re-\/enable them.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts}}, \mbox{\hyperlink{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}{set\+\_\+interrupts}}, \mbox{\hyperlink{asm_2types_8h_ae0233515480e60d29bcc731469976e02}{C\+R\+I\+T\+I\+C\+AL}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}\label{gb_8h_a9312e7ec34162d6b6ed0875631fa6fe3}}
+\index{gb.h@{gb.h}!set\_interrupts@{set\_interrupts}}
+\index{set\_interrupts@{set\_interrupts}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_interrupts()}{set\_interrupts()}}
+{\footnotesize\ttfamily void set\+\_\+interrupts (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{flags }\end{DoxyParamCaption})}
+
+Clears any pending interrupts and sets the interrupt mask register IO to flags.
+\begin{DoxyParams}{Parameters}
+{\em flags} & A logical OR of $\ast$\+\_\+\+I\+F\+L\+A\+GS\\
+\hline
+\end{DoxyParams}
+\begin{DoxyNote}{Note}
+\+: This disables and then re-\/enables interrupts so it must be used outside of a critical section.
+\end{DoxyNote}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts()}}, \mbox{\hyperlink{gb_8h_ad77796783b3a601b6f3781dfc3983499}{disable\+\_\+interrupts()}}
+
+\mbox{\hyperlink{gb_8h_a2ca7720b9a5da9b2173e1f74dba85541}{V\+B\+L\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a61a9e2910380de6abb34df14ef634eb4}{L\+C\+D\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a2f829cf27d6e3e24c875e9b82dfcb280}{J\+O\+Y\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad20897c5c8bd47f5d4005989bead0e55}\label{gb_8h_ad20897c5c8bd47f5d4005989bead0e55}}
+\index{gb.h@{gb.h}!reset@{reset}}
+\index{reset@{reset}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{reset()}{reset()}}
+{\footnotesize\ttfamily void reset (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Performs a warm reset by reloading the C\+PU value then jumping to the start of crt0 (0x0150) \mbox{\Hypertarget{gb_8h_acd186eb292d441f9389e77b545a55619}\label{gb_8h_acd186eb292d441f9389e77b545a55619}}
+\index{gb.h@{gb.h}!wait\_vbl\_done@{wait\_vbl\_done}}
+\index{wait\_vbl\_done@{wait\_vbl\_done}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{wait\_vbl\_done()}{wait\_vbl\_done()}}
+{\footnotesize\ttfamily void wait\+\_\+vbl\+\_\+done (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+H\+A\+L\+Ts the C\+PU and waits for the vertical blank interrupt (V\+BL) to finish.
+
+This is often used in main loops to idle the C\+PU at low power until it\textquotesingle{}s time to start the next frame. It\textquotesingle{}s also useful for syncing animation with the screen re-\/draw.
+
+Warning\+: If the V\+BL interrupt is disabled, this function will never return. If the screen is off this function returns immediately. \mbox{\Hypertarget{gb_8h_a04d57683cdd046dfa45e7e56d7c4ec4d}\label{gb_8h_a04d57683cdd046dfa45e7e56d7c4ec4d}}
+\index{gb.h@{gb.h}!display\_off@{display\_off}}
+\index{display\_off@{display\_off}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{display\_off()}{display\_off()}}
+{\footnotesize\ttfamily void display\+\_\+off (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Turns the display off.
+
+Waits until the V\+BL interrupt before turning the display off. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a2550e7b6b9fd7e1fc495872502311dbb}\label{gb_8h_a2550e7b6b9fd7e1fc495872502311dbb}}
+\index{gb.h@{gb.h}!refresh\_OAM@{refresh\_OAM}}
+\index{refresh\_OAM@{refresh\_OAM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{refresh\_OAM()}{refresh\_OAM()}}
+{\footnotesize\ttfamily void refresh\+\_\+\+O\+AM (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Copies data from shadow O\+AM to O\+AM \mbox{\Hypertarget{gb_8h_a97b9f2fc6ac7cae97656aca940d65d44}\label{gb_8h_a97b9f2fc6ac7cae97656aca940d65d44}}
+\index{gb.h@{gb.h}!hiramcpy@{hiramcpy}}
+\index{hiramcpy@{hiramcpy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{hiramcpy()}{hiramcpy()}}
+{\footnotesize\ttfamily void hiramcpy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{dst, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Copies data from somewhere in the lower address space to part of hi-\/ram.
+\begin{DoxyParams}{Parameters}
+{\em dst} & Offset in high ram (0x\+F\+F00 and above) to copy to. \\
+\hline
+{\em src} & Area to copy from \\
+\hline
+{\em n} & Number of bytes to copy. \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a7080649e10765996c581e5b618e603b8}\label{gb_8h_a7080649e10765996c581e5b618e603b8}}
+\index{gb.h@{gb.h}!set\_vram\_byte@{set\_vram\_byte}}
+\index{set\_vram\_byte@{set\_vram\_byte}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_vram\_byte()}{set\_vram\_byte()}}
+{\footnotesize\ttfamily void set\+\_\+vram\+\_\+byte (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{addr, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{v }\end{DoxyParamCaption})}
+
+Set byte in vram at given memory location
+
+
+\begin{DoxyParams}{Parameters}
+{\em addr} & address to write to \\
+\hline
+{\em v} & value \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}\label{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}}
+\index{gb.h@{gb.h}!get\_vram\_byte@{get\_vram\_byte}}
+\index{get\_vram\_byte@{get\_vram\_byte}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_vram\_byte()}{get\_vram\_byte()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+vram\+\_\+byte (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{addr }\end{DoxyParamCaption})}
+
+Get byte from vram at given memory location
+
+
+\begin{DoxyParams}{Parameters}
+{\em addr} & address to read from \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+read value
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_8h_a9005b80d3315f50f0fb0e1728e7ee60f}\label{gb_8h_a9005b80d3315f50f0fb0e1728e7ee60f}}
+\index{gb.h@{gb.h}!get\_bkg\_xy\_addr@{get\_bkg\_xy\_addr}}
+\index{get\_bkg\_xy\_addr@{get\_bkg\_xy\_addr}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_bkg\_xy\_addr()}{get\_bkg\_xy\_addr()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ get\+\_\+bkg\+\_\+xy\+\_\+addr (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Get address of X,Y tile of background map \mbox{\Hypertarget{gb_8h_aa224c9bac27c7fd268e62bdf33338a84}\label{gb_8h_aa224c9bac27c7fd268e62bdf33338a84}}
+\index{gb.h@{gb.h}!set\_2bpp\_palette@{set\_2bpp\_palette}}
+\index{set\_2bpp\_palette@{set\_2bpp\_palette}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_2bpp\_palette()}{set\_2bpp\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+2bpp\+\_\+palette (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{palette }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets palette for 2bpp color translation for G\+G/\+S\+MS, does nothing on GB \mbox{\Hypertarget{gb_8h_a1f00bd35cd56aac84c108f5a802c3f9c}\label{gb_8h_a1f00bd35cd56aac84c108f5a802c3f9c}}
+\index{gb.h@{gb.h}!set\_1bpp\_colors\_ex@{set\_1bpp\_colors\_ex}}
+\index{set\_1bpp\_colors\_ex@{set\_1bpp\_colors\_ex}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_1bpp\_colors\_ex()}{set\_1bpp\_colors\_ex()}}
+{\footnotesize\ttfamily void set\+\_\+1bpp\+\_\+colors\+\_\+ex (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{fgcolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{bgcolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{mode }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{gb_8h_adcb394299a1033616fc7d2faec8bd6ad}\label{gb_8h_adcb394299a1033616fc7d2faec8bd6ad}}
+\index{gb.h@{gb.h}!set\_1bpp\_colors@{set\_1bpp\_colors}}
+\index{set\_1bpp\_colors@{set\_1bpp\_colors}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_1bpp\_colors()}{set\_1bpp\_colors()}}
+{\footnotesize\ttfamily void set\+\_\+1bpp\+\_\+colors (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{fgcolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{bgcolor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}\label{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}}
+\index{gb.h@{gb.h}!set\_bkg\_data@{set\_bkg\_data}}
+\index{set\_bkg\_data@{set\_bkg\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_data()}{set\_bkg\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for the Background / Window
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (2 bpp) source tile data\\
+\hline
+\end{DoxyParams}
+Writes {\bfseries{nb\+\_\+tiles}} tiles to V\+R\+AM starting at {\bfseries{first\+\_\+tile}}, tile data is sourced from {\bfseries{data}}. Each Tile is 16 bytes in size (8x8 pixels, 2 bits-\/per-\/pixel).
+
+Note\+: Sprite Tiles 128-\/255 share the same memory region as Background Tiles 128-\/255.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines which bank of Background tile patterns are written to. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 indicates the first bank \item V\+B\+K\+\_\+\+R\+EG=1 indicates the second\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}{set\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}{set\+\_\+tile\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a711fa26feecc76dc51482b0f77062859}\label{gb_8h_a711fa26feecc76dc51482b0f77062859}}
+\index{gb.h@{gb.h}!set\_bkg\_1bpp\_data@{set\_bkg\_1bpp\_data}}
+\index{set\_bkg\_1bpp\_data@{set\_bkg\_1bpp\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_1bpp\_data()}{set\_bkg\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for the Background / Window using 1bpp source data
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first Tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of Tiles to write \\
+\hline
+{\em data} & Pointer to (1bpp) source Tile Pattern data\\
+\hline
+\end{DoxyParams}
+Similar to \mbox{\hyperlink{sms_8h_a8130306da1177f4fef89e699f8e2add4}{set\+\_\+bkg\+\_\+data}}, except source data is 1 bit-\/per-\/pixel which gets expanded into 2 bits-\/per-\/pixel.
+
+For a given bit that represent a pixel\+: \begin{DoxyItemize}
+\item 0 will be expanded into color 0 \item 1 will be expanded into color 1, 2 or 3 depending on color argument\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}, \mbox{\hyperlink{gb_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}{H\+I\+D\+E\+\_\+\+B\+KG}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a5c13238dfec416439d75b133a272e6df}\label{gb_8h_a5c13238dfec416439d75b133a272e6df}}
+\index{gb.h@{gb.h}!get\_bkg\_data@{get\_bkg\_data}}
+\index{get\_bkg\_data@{get\_bkg\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_bkg\_data()}{get\_bkg\_data()}}
+{\footnotesize\ttfamily void get\+\_\+bkg\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Copies from Background / Window V\+R\+AM Tile Pattern data into a buffer
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first Tile to read from \\
+\hline
+{\em nb\+\_\+tiles} & Number of Tiles to read \\
+\hline
+{\em data} & Pointer to destination buffer for Tile Pattern data\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{nb\+\_\+tiles}} tiles from V\+R\+AM starting at {\bfseries{first\+\_\+tile}}, Tile data is copied into {\bfseries{data}}.
+
+Each Tile is 16 bytes, so the buffer pointed to by {\bfseries{data}} should be at least {\bfseries{nb\+\_\+tiles}} x 16 bytes in size.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a7ef32e7c1669aba48f235500a495baba}{get\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_8h_afd8fd71eaa36b0ddd54a2e8e516ed224}{get\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}\label{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}}
+\index{gb.h@{gb.h}!set\_bkg\_tiles@{set\_bkg\_tiles}}
+\index{set\_bkg\_tiles@{set\_bkg\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_tiles()}{set\_bkg\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Sets a rectangular region of Background Tile Map.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em tiles} & Pointer to source tile map data\\
+\hline
+\end{DoxyParams}
+Entries are copied from map at {\bfseries{tiles}} to the Background Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+Use \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap()}} instead when\+: \begin{DoxyItemize}
+\item Source map is wider than 32 tiles. \item Writing a width that does not match the source map width {\bfseries{and}} more than one row high at a time.\end{DoxyItemize}
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+Note\+: Patterns 128-\/255 overlap with patterns 128-\/255 of the sprite Tile Pattern table.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines whether Tile Numbers or Tile Attributes get set. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 Tile Numbers are written \item V\+B\+K\+\_\+\+R\+EG=1 Tile Attributes are written\end{DoxyItemize}
+G\+BC Tile Attributes are defined as\+: \begin{DoxyItemize}
+\item Bit 7 -\/ Priority flag. When this is set, it puts the tile above the sprites with colour 0 being transparent. ~\newline
+ 0\+: Below sprites ~\newline
+ 1\+: Above sprites ~\newline
+ Note\+: \mbox{\hyperlink{sms_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}} needs to be set for these priorities to take place. \item Bit 6 -\/ Vertical flip. Dictates which way up the tile is drawn vertically. ~\newline
+ 0\+: Normal ~\newline
+ 1\+: Flipped Vertically \item Bit 5 -\/ Horizontal flip. Dictates which way up the tile is drawn horizontally. ~\newline
+ 0\+: Normal ~\newline
+ 1\+: Flipped Horizontally \item Bit 4 -\/ Not used \item Bit 3 -\/ Character Bank specification. Dictates from which bank of Background Tile Patterns the tile is taken. ~\newline
+ 0\+: Bank 0 ~\newline
+ 1\+: Bank 1 \item Bit 2 -\/ See bit 0. \item Bit 1 -\/ See bit 0. \item Bit 0 -\/ Bits 0-\/2 indicate which of the 7 B\+KG colour palettes the tile is assigned.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}
+
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a811c386cac0df2d260aacb5a43608be5}\label{gb_8h_a811c386cac0df2d260aacb5a43608be5}}
+\index{gb.h@{gb.h}!set\_bkg\_based\_tiles@{set\_bkg\_based\_tiles}}
+\index{set\_bkg\_based\_tiles@{set\_bkg\_based\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_based\_tiles()}{set\_bkg\_based\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+based\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular region of Background Tile Map. The offset value in {\bfseries{base\+\_\+tile}} is added to the tile ID for each map entry.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em tiles} & Pointer to source tile map data \\
+\hline
+{\em base\+\_\+tile} & Offset each tile ID entry of the source map by this value. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+This is identical to \mbox{\hyperlink{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}{set\+\_\+bkg\+\_\+tiles()}} except that it adds the {\bfseries{base\+\_\+tile}} parameter for when a tile map\textquotesingle{}s tiles don\textquotesingle{}t start at index zero. (For example, the tiles used by the map range from 100 -\/$>$ 120 in V\+R\+AM instead of 0 -\/$>$ 20).
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_adb21d1c7d533a7133bab36a845489780}\label{gb_8h_adb21d1c7d533a7133bab36a845489780}}
+\index{gb.h@{gb.h}!set\_bkg\_submap@{set\_bkg\_submap}}
+\index{set\_bkg\_submap@{set\_bkg\_submap}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_submap()}{set\_bkg\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Background Tile Map using a sub-\/region from a source tile map. Useful for scrolling implementations of maps larger than 32 x 32 tiles.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+Entries are copied from {\bfseries{map}} to the Background Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles, using {\bfseries{map\+\_\+w}} as the rowstride for the source tile map.
+
+Use this instead of \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+See \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} for setting C\+GB attribute maps with \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}
+
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}\label{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}}
+\index{gb.h@{gb.h}!set\_bkg\_based\_submap@{set\_bkg\_based\_submap}}
+\index{set\_bkg\_based\_submap@{set\_bkg\_based\_submap}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_based\_submap()}{set\_bkg\_based\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+based\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Background Tile Map using a sub-\/region from a source tile map. The offset value in {\bfseries{base\+\_\+tile}} is added to the tile ID for each map entry.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255 \\
+\hline
+{\em base\+\_\+tile} & Offset each tile ID entry of the source map by this value. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+This is identical to \mbox{\hyperlink{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap()}} except that it adds the {\bfseries{base\+\_\+tile}} parameter for when a tile map\textquotesingle{}s tiles don\textquotesingle{}t start at index zero. (For example, the tiles used by the map range from 100 -\/$>$ 120 in V\+R\+AM instead of 0 -\/$>$ 20).
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}\label{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}}
+\index{gb.h@{gb.h}!get\_bkg\_tiles@{get\_bkg\_tiles}}
+\index{get\_bkg\_tiles@{get\_bkg\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_bkg\_tiles()}{get\_bkg\_tiles()}}
+{\footnotesize\ttfamily void get\+\_\+bkg\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Copies a rectangular region of Background Tile Map entries into a buffer.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em h} & Height of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em tiles} & Pointer to destination buffer for Tile Map data\\
+\hline
+\end{DoxyParams}
+Entries are copied into {\bfseries{tiles}} from the Background Tile Map starting at {\bfseries{x}}, {\bfseries{y}} reading across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+One byte per tile.
+
+The buffer pointed to by {\bfseries{tiles}} should be at least {\bfseries{x}} x {\bfseries{y}} bytes in size.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8a469de4c6640f921254b336b5a6191a}{get\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a55c6581dbe9300dc6df41730f090af51}{get\+\_\+bkg\+\_\+tile\+\_\+xy}}, \mbox{\hyperlink{gb_8h_a728b9440accedc5fb3477be3d150323a}{get\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}{get\+\_\+vram\+\_\+byte}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a74ee8f0a3495508c90de4ce246b81060}\label{gb_8h_a74ee8f0a3495508c90de4ce246b81060}}
+\index{gb.h@{gb.h}!set\_bkg\_tile\_xy@{set\_bkg\_tile\_xy}}
+\index{set\_bkg\_tile\_xy@{set\_bkg\_tile\_xy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_tile\_xy()}{set\_bkg\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ set\+\_\+bkg\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{t }\end{DoxyParamCaption})}
+
+Set single tile t on background layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+{\em t} & tile index \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns the address of tile, so you may use faster \mbox{\hyperlink{gb_8h_a7080649e10765996c581e5b618e603b8}{set\+\_\+vram\+\_\+byte()}} later
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_8h_a55c6581dbe9300dc6df41730f090af51}\label{gb_8h_a55c6581dbe9300dc6df41730f090af51}}
+\index{gb.h@{gb.h}!get\_bkg\_tile\_xy@{get\_bkg\_tile\_xy}}
+\index{get\_bkg\_tile\_xy@{get\_bkg\_tile\_xy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_bkg\_tile\_xy()}{get\_bkg\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+bkg\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Get single tile t on background layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns tile index
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_8h_a6261537edc74068e3f7f057e6a3e8a57}\label{gb_8h_a6261537edc74068e3f7f057e6a3e8a57}}
+\index{gb.h@{gb.h}!move\_bkg@{move\_bkg}}
+\index{move\_bkg@{move\_bkg}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{move\_bkg()}{move\_bkg()}}
+{\footnotesize\ttfamily void move\+\_\+bkg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves the Background Layer to the position specified in {\bfseries{x}} and {\bfseries{y}} in pixels.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X axis screen coordinate for Left edge of the Background \\
+\hline
+{\em y} & Y axis screen coordinate for Top edge of the Background\\
+\hline
+\end{DoxyParams}
+0,0 is the top left corner of the GB screen. The Background Layer wraps around the screen, so when part of it goes off the screen it appears on the opposite side (factoring in the larger size of the Background Layer versus the screen size).
+
+The background layer is always under the Window Layer.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}, \mbox{\hyperlink{gb_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}{H\+I\+D\+E\+\_\+\+B\+KG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a1f583f7a880daa6145ca78b086a209d1}\label{gb_8h_a1f583f7a880daa6145ca78b086a209d1}}
+\index{gb.h@{gb.h}!scroll\_bkg@{scroll\_bkg}}
+\index{scroll\_bkg@{scroll\_bkg}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{scroll\_bkg()}{scroll\_bkg()}}
+{\footnotesize\ttfamily void scroll\+\_\+bkg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves the Background relative to it\textquotesingle{}s current position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & Number of pixels to move the Background on the {\bfseries{X axis}} ~\newline
+ Range\+: -\/128 -\/ 127 \\
+\hline
+{\em y} & Number of pixels to move the Background on the {\bfseries{Y axis}} ~\newline
+ Range\+: -\/128 -\/ 127\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6261537edc74068e3f7f057e6a3e8a57}{move\+\_\+bkg}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_aa8213cfad631865e3b6faec18e772cb4}\label{gb_8h_aa8213cfad631865e3b6faec18e772cb4}}
+\index{gb.h@{gb.h}!get\_win\_xy\_addr@{get\_win\_xy\_addr}}
+\index{get\_win\_xy\_addr@{get\_win\_xy\_addr}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_win\_xy\_addr()}{get\_win\_xy\_addr()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ get\+\_\+win\+\_\+xy\+\_\+addr (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Get address of X,Y tile of window map \mbox{\Hypertarget{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}\label{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}}
+\index{gb.h@{gb.h}!set\_win\_data@{set\_win\_data}}
+\index{set\_win\_data@{set\_win\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_data()}{set\_win\_data()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for the Window / Background
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (2 bpp) source Tile Pattern data.\\
+\hline
+\end{DoxyParams}
+This is the same as \mbox{\hyperlink{sms_8h_a8130306da1177f4fef89e699f8e2add4}{set\+\_\+bkg\+\_\+data}}, since the Window Layer and Background Layer share the same Tile pattern data.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}
+
+\mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a650d2df96e69a40b70548ab468e00f25}{set\+\_\+data}}
+
+\mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_acd5ee7a94059e6edbe9223f291bc2b46}\label{gb_8h_acd5ee7a94059e6edbe9223f291bc2b46}}
+\index{gb.h@{gb.h}!set\_win\_1bpp\_data@{set\_win\_1bpp\_data}}
+\index{set\_win\_1bpp\_data@{set\_win\_1bpp\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_1bpp\_data()}{set\_win\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for the Window / Background using 1bpp source data
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (1bpp) source Tile Pattern data\\
+\hline
+\end{DoxyParams}
+This is the same as \mbox{\hyperlink{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}}, since the Window Layer and Background Layer share the same Tile pattern data.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a711fa26feecc76dc51482b0f77062859}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}}, \mbox{\hyperlink{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}{set\+\_\+win\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a7ef32e7c1669aba48f235500a495baba}\label{gb_8h_a7ef32e7c1669aba48f235500a495baba}}
+\index{gb.h@{gb.h}!get\_win\_data@{get\_win\_data}}
+\index{get\_win\_data@{get\_win\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_win\_data()}{get\_win\_data()}}
+{\footnotesize\ttfamily void get\+\_\+win\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Copies from Window / Background V\+R\+AM Tile Pattern data into a buffer
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first Tile to read from \\
+\hline
+{\em nb\+\_\+tiles} & Number of Tiles to read \\
+\hline
+{\em data} & Pointer to destination buffer for Tile Pattern Data\\
+\hline
+\end{DoxyParams}
+This is the same as \mbox{\hyperlink{gb_8h_a5c13238dfec416439d75b133a272e6df}{get\+\_\+bkg\+\_\+data}}, since the Window Layer and Background Layer share the same Tile pattern data.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a5c13238dfec416439d75b133a272e6df}{get\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_afd8fd71eaa36b0ddd54a2e8e516ed224}{get\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a5c59b4ee6323af9832998906d087266b}\label{gb_8h_a5c59b4ee6323af9832998906d087266b}}
+\index{gb.h@{gb.h}!set\_win\_tiles@{set\_win\_tiles}}
+\index{set\_win\_tiles@{set\_win\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_tiles()}{set\_win\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Sets a rectangular region of the Window Tile Map.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em tiles} & Pointer to source tile map data\\
+\hline
+\end{DoxyParams}
+Entries are copied from map at {\bfseries{tiles}} to the Window Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+Use \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap()}} instead when\+: \begin{DoxyItemize}
+\item Source map is wider than 32 tiles. \item Writing a width that does not match the source map width {\bfseries{and}} more than one row high at a time.\end{DoxyItemize}
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+Note\+: Patterns 128-\/255 overlap with patterns 128-\/255 of the sprite Tile Pattern table.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines whether Tile Numbers or Tile Attributes get set. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 Tile Numbers are written \item V\+B\+K\+\_\+\+R\+EG=1 Tile Attributes are written\end{DoxyItemize}
+For more details about G\+BC Tile Attributes see \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a739a212609ae60c9c56c095f96b4ea80}\label{gb_8h_a739a212609ae60c9c56c095f96b4ea80}}
+\index{gb.h@{gb.h}!set\_win\_based\_tiles@{set\_win\_based\_tiles}}
+\index{set\_win\_based\_tiles@{set\_win\_based\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_based\_tiles()}{set\_win\_based\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+based\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular region of the Window Tile Map. The offset value in {\bfseries{base\+\_\+tile}} is added to the tile ID for each map entry.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em tiles} & Pointer to source tile map data \\
+\hline
+{\em base\+\_\+tile} & Offset each tile ID entry of the source map by this value. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+This is identical to \mbox{\hyperlink{sms_8h_a429db030287423012f40a6dca81ae7e3}{set\+\_\+win\+\_\+tiles()}} except that it adds the {\bfseries{base\+\_\+tile}} parameter for when a tile map\textquotesingle{}s tiles don\textquotesingle{}t start at index zero. (For example, the tiles used by the map range from 100 -\/$>$ 120 in V\+R\+AM instead of 0 -\/$>$ 20).
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}\label{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}}
+\index{gb.h@{gb.h}!set\_win\_submap@{set\_win\_submap}}
+\index{set\_win\_submap@{set\_win\_submap}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_submap()}{set\_win\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Window Tile Map using a sub-\/region from a source tile map.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Wimdpw Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+Entries are copied from {\bfseries{map}} to the Window Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles, using {\bfseries{map\+\_\+w}} as the rowstride for the source tile map.
+
+Use this instead of \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}} when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines whether Tile Numbers or Tile Attributes get set. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 Tile Numbers are written \item V\+B\+K\+\_\+\+R\+EG=1 Tile Attributes are written\end{DoxyItemize}
+See \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} for details about C\+GB attribute maps with \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a1b8a1026983cb2b2c0bd46334b4692a0}\label{gb_8h_a1b8a1026983cb2b2c0bd46334b4692a0}}
+\index{gb.h@{gb.h}!set\_win\_based\_submap@{set\_win\_based\_submap}}
+\index{set\_win\_based\_submap@{set\_win\_based\_submap}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_based\_submap()}{set\_win\_based\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+based\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Window Tile Map using a sub-\/region from a source tile map. The offset value in {\bfseries{base\+\_\+tile}} is added to the tile ID for each map entry.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Wimdpw Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255 \\
+\hline
+{\em base\+\_\+tile} & Offset each tile ID entry of the source map by this value. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+This is identical to \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap()}} except that it adds the {\bfseries{base\+\_\+tile}} parameter for when a tile map\textquotesingle{}s tiles don\textquotesingle{}t start at index zero. (For example, the tiles used by the map range from 100 -\/$>$ 120 in V\+R\+AM instead of 0 -\/$>$ 20).
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a8a469de4c6640f921254b336b5a6191a}\label{gb_8h_a8a469de4c6640f921254b336b5a6191a}}
+\index{gb.h@{gb.h}!get\_win\_tiles@{get\_win\_tiles}}
+\index{get\_win\_tiles@{get\_win\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_win\_tiles()}{get\_win\_tiles()}}
+{\footnotesize\ttfamily void get\+\_\+win\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Copies a rectangular region of Window Tile Map entries into a buffer.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em h} & Height of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em tiles} & Pointer to destination buffer for Tile Map data\\
+\hline
+\end{DoxyParams}
+Entries are copied into {\bfseries{tiles}} from the Window Tile Map starting at {\bfseries{x}}, {\bfseries{y}} reading across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+One byte per tile.
+
+The buffer pointed to by {\bfseries{tiles}} should be at least {\bfseries{x}} x {\bfseries{y}} bytes in size.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}{get\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a55c6581dbe9300dc6df41730f090af51}{get\+\_\+bkg\+\_\+tile\+\_\+xy}}, \mbox{\hyperlink{gb_8h_a728b9440accedc5fb3477be3d150323a}{get\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_aa33ba8b8d381df76edf15ea251ccb675}{get\+\_\+vram\+\_\+byte}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a0c70a53db1fbc0c99627da3f282befd8}\label{gb_8h_a0c70a53db1fbc0c99627da3f282befd8}}
+\index{gb.h@{gb.h}!set\_win\_tile\_xy@{set\_win\_tile\_xy}}
+\index{set\_win\_tile\_xy@{set\_win\_tile\_xy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_tile\_xy()}{set\_win\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ set\+\_\+win\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{t }\end{DoxyParamCaption})}
+
+Set single tile t on window layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+{\em t} & tile index \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns the address of tile, so you may use faster \mbox{\hyperlink{gb_8h_a7080649e10765996c581e5b618e603b8}{set\+\_\+vram\+\_\+byte()}} later
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_8h_a2e29fdca81c28c627c2591029722e71c}\label{gb_8h_a2e29fdca81c28c627c2591029722e71c}}
+\index{gb.h@{gb.h}!get\_win\_tile\_xy@{get\_win\_tile\_xy}}
+\index{get\_win\_tile\_xy@{get\_win\_tile\_xy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_win\_tile\_xy()}{get\_win\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+win\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Get single tile t on window layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns the tile index
+\end{DoxyReturn}
+\mbox{\Hypertarget{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}\label{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}}
+\index{gb.h@{gb.h}!move\_win@{move\_win}}
+\index{move\_win@{move\_win}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{move\_win()}{move\_win()}}
+{\footnotesize\ttfamily void move\+\_\+win (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves the Window to the {\bfseries{x}}, {\bfseries{y}} position on the screen.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X coordinate for Left edge of the Window (actual displayed location will be X -\/ 7) \\
+\hline
+{\em y} & Y coordinate for Top edge of the Window\\
+\hline
+\end{DoxyParams}
+7,0 is the top left corner of the screen in Window coordinates. The Window is locked to the bottom right corner.
+
+The Window is always over the Background layer.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a12c2b5ac249d01caf1561cbbf3962044}\label{gb_8h_a12c2b5ac249d01caf1561cbbf3962044}}
+\index{gb.h@{gb.h}!scroll\_win@{scroll\_win}}
+\index{scroll\_win@{scroll\_win}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{scroll\_win()}{scroll\_win()}}
+{\footnotesize\ttfamily void scroll\+\_\+win (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Move the Window relative to its current position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & Number of pixels to move the window on the {\bfseries{X axis}} ~\newline
+ Range\+: -\/128 -\/ 127 \\
+\hline
+{\em y} & Number of pixels to move the window on the {\bfseries{Y axis}} ~\newline
+ Range\+: -\/128 -\/ 127\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ae45b1c639698951b47e44fa8e89556f2}\label{gb_8h_ae45b1c639698951b47e44fa8e89556f2}}
+\index{gb.h@{gb.h}!set\_sprite\_data@{set\_sprite\_data}}
+\index{set\_sprite\_data@{set\_sprite\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_data()}{set\_sprite\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for Sprites
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (2 bpp) source Tile Pattern data\\
+\hline
+\end{DoxyParams}
+Writes {\bfseries{nb\+\_\+tiles}} tiles to V\+R\+AM starting at {\bfseries{first\+\_\+tile}}, tile data is sourced from {\bfseries{data}}. Each Tile is 16 bytes in size (8x8 pixels, 2 bits-\/per-\/pixel).
+
+Note\+: Sprite Tiles 128-\/255 share the same memory region as Background Tiles 128-\/255.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines which bank of Background tile patterns are written to. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 indicates the first bank \item V\+B\+K\+\_\+\+R\+EG=1 indicates the second \end{DoxyItemize}
+\mbox{\Hypertarget{gb_8h_ab3e60c92c9f8fbed855f8712187ea3ea}\label{gb_8h_ab3e60c92c9f8fbed855f8712187ea3ea}}
+\index{gb.h@{gb.h}!set\_sprite\_1bpp\_data@{set\_sprite\_1bpp\_data}}
+\index{set\_sprite\_1bpp\_data@{set\_sprite\_1bpp\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_1bpp\_data()}{set\_sprite\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data for Sprites using 1bpp source data
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (1bpp) source Tile Pattern data\\
+\hline
+\end{DoxyParams}
+Similar to \mbox{\hyperlink{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}{set\+\_\+sprite\+\_\+data}}, except source data is 1 bit-\/per-\/pixel which gets expanded into 2 bits-\/per-\/pixel.
+
+For a given bit that represent a pixel\+: \begin{DoxyItemize}
+\item 0 will be expanded into color 0 \item 1 will be expanded into color 3\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a495bc9f405f916f02ad5d97e6e730134}{S\+H\+O\+W\+\_\+\+S\+P\+R\+I\+T\+ES}}, \mbox{\hyperlink{gb_8h_a69ef98aee664b8abd8d1a3d45f016dda}{H\+I\+D\+E\+\_\+\+S\+P\+R\+I\+T\+ES}}, \mbox{\hyperlink{gb_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_adcdec4034a14abc5be9bb88c29b947c9}\label{gb_8h_adcdec4034a14abc5be9bb88c29b947c9}}
+\index{gb.h@{gb.h}!get\_sprite\_data@{get\_sprite\_data}}
+\index{get\_sprite\_data@{get\_sprite\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_sprite\_data()}{get\_sprite\_data()}}
+{\footnotesize\ttfamily void get\+\_\+sprite\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})}
+
+Copies from Sprite V\+R\+AM Tile Pattern data into a buffer
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to read from \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to read \\
+\hline
+{\em data} & Pointer to destination buffer for Tile Pattern data\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{nb\+\_\+tiles}} tiles from V\+R\+AM starting at {\bfseries{first\+\_\+tile}}, tile data is copied into {\bfseries{data}}.
+
+Each Tile is 16 bytes, so the buffer pointed to by {\bfseries{data}} should be at least {\bfseries{nb\+\_\+tiles}} x 16 bytes in size. \mbox{\Hypertarget{gb_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}\label{gb_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}}
+\index{gb.h@{gb.h}!SET\_SHADOW\_OAM\_ADDRESS@{SET\_SHADOW\_OAM\_ADDRESS}}
+\index{SET\_SHADOW\_OAM\_ADDRESS@{SET\_SHADOW\_OAM\_ADDRESS}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{SET\_SHADOW\_OAM\_ADDRESS()}{SET\_SHADOW\_OAM\_ADDRESS()}}
+{\footnotesize\ttfamily void S\+E\+T\+\_\+\+S\+H\+A\+D\+O\+W\+\_\+\+O\+A\+M\+\_\+\+A\+D\+D\+R\+E\+SS (\begin{DoxyParamCaption}\item[{void $\ast$}]{address }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Enable O\+AM D\+MA copy each V\+Blank and set it to transfer any 256-\/byte aligned array \mbox{\Hypertarget{gb_8h_a05bf0b9f1328de7b568a19a2a428bcfe}\label{gb_8h_a05bf0b9f1328de7b568a19a2a428bcfe}}
+\index{gb.h@{gb.h}!set\_sprite\_tile@{set\_sprite\_tile}}
+\index{set\_sprite\_tile@{set\_sprite\_tile}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_tile()}{set\_sprite\_tile()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+tile (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets sprite number {\bfseries{nb\+\_\+\+\_\+in the O\+AM to display tile number \+\_\+\+\_\+tile}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em tile} & Selects a tile (0 -\/ 255) from memory at 8000h -\/ 8F\+F\+Fh ~\newline
+ In C\+GB Mode this could be either in V\+R\+AM Bank ~\newline
+ 0 or 1, depending on Bit 3 of the O\+AM Attribute Flag ~\newline
+ (see \mbox{\hyperlink{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}})\\
+\hline
+\end{DoxyParams}
+In 8x16 mode\+: \begin{DoxyItemize}
+\item The sprite will also display the next tile ({\bfseries{tile}} + 1) directly below (y + 8) the first tile. \item The lower bit of the tile number is ignored\+: the upper 8x8 tile is ({\bfseries{tile}} \& 0x\+FE), and the lower 8x8 tile is ({\bfseries{tile}} $\vert$ 0x01). \item See\+: \mbox{\hyperlink{sms_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}} \end{DoxyItemize}
+\mbox{\Hypertarget{gb_8h_af5c0beff7d7a7d8641b51fd95c811b2a}\label{gb_8h_af5c0beff7d7a7d8641b51fd95c811b2a}}
+\index{gb.h@{gb.h}!get\_sprite\_tile@{get\_sprite\_tile}}
+\index{get\_sprite\_tile@{get\_sprite\_tile}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_sprite\_tile()}{get\_sprite\_tile()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+sprite\+\_\+tile (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Returns the tile number of sprite number {\bfseries{nb}} in the O\+AM.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}\label{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}}
+\index{gb.h@{gb.h}!set\_sprite\_prop@{set\_sprite\_prop}}
+\index{set\_sprite\_prop@{set\_sprite\_prop}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_prop()}{set\_sprite\_prop()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+prop (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{prop }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets the O\+AM Property Flags of sprite number {\bfseries{nb}} to those defined in {\bfseries{prop}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em prop} & Property setting (see bitfield description)\\
+\hline
+\end{DoxyParams}
+The bits in {\bfseries{prop}} represent\+: \begin{DoxyItemize}
+\item Bit 7 -\/ Priority flag. When this is set the sprites appear behind the background and window layer. ~\newline
+ 0\+: infront ~\newline
+ 1\+: behind \item Bit 6 -\/ Vertical flip. Dictates which way up the sprite is drawn vertically. ~\newline
+ 0\+: normal ~\newline
+ 1\+:upside down \item Bit 5 -\/ Horizontal flip. Dictates which way up the sprite is drawn horizontally. ~\newline
+ 0\+: normal ~\newline
+ 1\+:back to front \item Bit 4 -\/ D\+M\+G/\+Non-\/\+C\+GB Mode Only. Assigns either one of the two b/w palettes to the sprite. ~\newline
+ 0\+: O\+BJ palette 0 ~\newline
+ 1\+: O\+BJ palette 1 \item Bit 3 -\/ G\+BC only. Dictates from which bank of Sprite Tile Patterns the tile is taken. ~\newline
+ 0\+: Bank 0 ~\newline
+ 1\+: Bank 1 \item Bit 2 -\/ See bit 0. \item Bit 1 -\/ See bit 0. \item Bit 0 -\/ G\+BC only. Bits 0-\/2 indicate which of the 7 O\+BJ colour palettes the sprite is assigned. \end{DoxyItemize}
+\mbox{\Hypertarget{gb_8h_a6b873c807c9e2c90fb574951e85fdf88}\label{gb_8h_a6b873c807c9e2c90fb574951e85fdf88}}
+\index{gb.h@{gb.h}!get\_sprite\_prop@{get\_sprite\_prop}}
+\index{get\_sprite\_prop@{get\_sprite\_prop}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_sprite\_prop()}{get\_sprite\_prop()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+sprite\+\_\+prop (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Returns the O\+AM Property Flags of sprite number {\bfseries{nb}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}} for property bitfield settings
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ab42c12c1d9aed3fd963248fbea9830cd}\label{gb_8h_ab42c12c1d9aed3fd963248fbea9830cd}}
+\index{gb.h@{gb.h}!move\_sprite@{move\_sprite}}
+\index{move\_sprite@{move\_sprite}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{move\_sprite()}{move\_sprite()}}
+{\footnotesize\ttfamily void move\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves sprite number {\bfseries{nb}} to the {\bfseries{x}}, {\bfseries{y}} position on the screen.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em x} & X Position. Specifies the sprites horizontal position on the screen (minus 8). ~\newline
+ An offscreen value (X=0 or X$>$=168) hides the sprite, but the sprite still affects the priority ordering -\/ a better way to hide a sprite is to set its Y-\/coordinate offscreen. \\
+\hline
+{\em y} & Y Position. Specifies the sprites vertical position on the screen (minus 16). ~\newline
+ An offscreen value (for example, Y=0 or Y$>$=160) hides the sprite.\\
+\hline
+\end{DoxyParams}
+Moving the sprite to 0,0 (or similar off-\/screen location) will hide it. \mbox{\Hypertarget{gb_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}\label{gb_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}}
+\index{gb.h@{gb.h}!scroll\_sprite@{scroll\_sprite}}
+\index{scroll\_sprite@{scroll\_sprite}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{scroll\_sprite()}{scroll\_sprite()}}
+{\footnotesize\ttfamily void scroll\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves sprite number {\bfseries{nb}} relative to its current position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em x} & Number of pixels to move the sprite on the {\bfseries{X axis}} ~\newline
+ Range\+: -\/128 -\/ 127 \\
+\hline
+{\em y} & Number of pixels to move the sprite on the {\bfseries{Y axis}} ~\newline
+ Range\+: -\/128 -\/ 127\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab42c12c1d9aed3fd963248fbea9830cd}{move\+\_\+sprite}} for more details about the X and Y position
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_ad22c51635d052399bbbe1777999c794d}\label{gb_8h_ad22c51635d052399bbbe1777999c794d}}
+\index{gb.h@{gb.h}!hide\_sprite@{hide\_sprite}}
+\index{hide\_sprite@{hide\_sprite}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{hide\_sprite()}{hide\_sprite()}}
+{\footnotesize\ttfamily void hide\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Hides sprite number {\bfseries{nb}} by moving it to zero position by Y.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_a650d2df96e69a40b70548ab468e00f25}\label{gb_8h_a650d2df96e69a40b70548ab468e00f25}}
+\index{gb.h@{gb.h}!set\_data@{set\_data}}
+\index{set\_data@{set\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_data()}{set\_data()}}
+{\footnotesize\ttfamily void set\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{vram\+\_\+addr, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Copies arbitrary data to an address in V\+R\+AM without taking into account the state of L\+C\+DC bits 3 or 4.
+
+
+\begin{DoxyParams}{Parameters}
+{\em vram\+\_\+addr} & Pointer to destination V\+R\+AM Address \\
+\hline
+{\em data} & Pointer to source buffer \\
+\hline
+{\em len} & Number of bytes to copy\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{len}} bytes from a buffer at {\bfseries{data}} to V\+R\+AM starting at {\bfseries{vram\+\_\+addr}}.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines which bank of Background tile patterns are written to. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 indicates the first bank \item V\+B\+K\+\_\+\+R\+EG=1 indicates the second\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}{set\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}{set\+\_\+tile\+\_\+data}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_afd8fd71eaa36b0ddd54a2e8e516ed224}\label{gb_8h_afd8fd71eaa36b0ddd54a2e8e516ed224}}
+\index{gb.h@{gb.h}!get\_data@{get\_data}}
+\index{get\_data@{get\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_data()}{get\_data()}}
+{\footnotesize\ttfamily void get\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{vram\+\_\+addr, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Copies arbitrary data from an address in V\+R\+AM into a buffer without taking into account the state of L\+C\+DC bits 3 or 4.
+
+
+\begin{DoxyParams}{Parameters}
+{\em vram\+\_\+addr} & Pointer to source V\+R\+AM Address \\
+\hline
+{\em data} & Pointer to destination buffer \\
+\hline
+{\em len} & Number of bytes to copy\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{len}} bytes from V\+R\+AM starting at {\bfseries{vram\+\_\+addr}} into a buffer at {\bfseries{data}}.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines which bank of Background tile patterns are written to. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 indicates the first bank \item V\+B\+K\+\_\+\+R\+EG=1 indicates the second\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a5c13238dfec416439d75b133a272e6df}{get\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a7ef32e7c1669aba48f235500a495baba}{get\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}{get\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a8a469de4c6640f921254b336b5a6191a}{get\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a728b9440accedc5fb3477be3d150323a}{get\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a36f9e5d95c2d7d58f203b5ac358e25e7}\label{gb_8h_a36f9e5d95c2d7d58f203b5ac358e25e7}}
+\index{gb.h@{gb.h}!vmemcpy@{vmemcpy}}
+\index{vmemcpy@{vmemcpy}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{vmemcpy()}{vmemcpy()}}
+{\footnotesize\ttfamily void vmemcpy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{dest, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Copies arbitrary data from an address in V\+R\+AM into a buffer
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Pointer to destination buffer (may be in V\+R\+AM) \\
+\hline
+{\em sour} & Pointer to source buffer (may be in V\+R\+AM) \\
+\hline
+{\em len} & Number of bytes to copy\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{len}} bytes from or to V\+R\+AM starting at {\bfseries{sour}} into a buffer or to V\+R\+AM at {\bfseries{dest}}.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines which bank of Background tile patterns are written to. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 indicates the first bank \item V\+B\+K\+\_\+\+R\+EG=1 indicates the second \end{DoxyItemize}
+\mbox{\Hypertarget{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}\label{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}}
+\index{gb.h@{gb.h}!set\_tiles@{set\_tiles}}
+\index{set\_tiles@{set\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_tiles()}{set\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{vram\+\_\+addr, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Sets a rectangular region of Tile Map entries at a given V\+R\+AM Address without taking into account the state of L\+C\+DC bit 3.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 32 \\
+\hline
+{\em vram\+\_\+addr} & Pointer to destination V\+R\+AM Address \\
+\hline
+{\em tiles} & Pointer to source Tile Map data\\
+\hline
+\end{DoxyParams}
+Entries are copied from {\bfseries{tiles}} to Tile Map at address vram\+\_\+addr starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+One byte per source tile map entry.
+
+There are two 32x32 Tile Maps in V\+R\+AM at addresses 9800h-\/9\+B\+F\+Fh and 9C00h-\/9\+F\+F\+Fh.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines whether Tile Numbers or Tile Attributes get set. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 Tile Numbers are written \item V\+B\+K\+\_\+\+R\+EG=1 Tile Attributes are written\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}\label{gb_8h_abe4846d4570b4880b0e54b9e503f4d30}}
+\index{gb.h@{gb.h}!set\_tile\_data@{set\_tile\_data}}
+\index{set\_tile\_data@{set\_tile\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_data()}{set\_tile\_data()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base }\end{DoxyParamCaption})}
+
+Sets V\+R\+AM Tile Pattern data starting from given base address without taking into account the state of L\+C\+DC bit 4.
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to (2 bpp) source Tile Pattern data. \\
+\hline
+{\em base} & M\+SB of the destination address in V\+R\+AM (usually 0x80 or 0x90 which gives 0x8000 or 0x9000)\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_ac2bf0c4919c30d322fa5853c896e710f}{set\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_8h_a650d2df96e69a40b70548ab468e00f25}{set\+\_\+data}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a728b9440accedc5fb3477be3d150323a}\label{gb_8h_a728b9440accedc5fb3477be3d150323a}}
+\index{gb.h@{gb.h}!get\_tiles@{get\_tiles}}
+\index{get\_tiles@{get\_tiles}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{get\_tiles()}{get\_tiles()}}
+{\footnotesize\ttfamily void get\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{vram\+\_\+addr, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+Copies a rectangular region of Tile Map entries from a given V\+R\+AM Address into a buffer without taking into account the state of L\+C\+DC bit 3.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em h} & Height of area to copy in tiles. Range 0 -\/ 31 \\
+\hline
+{\em vram\+\_\+addr} & Pointer to source V\+R\+AM Address \\
+\hline
+{\em tiles} & Pointer to destination buffer for Tile Map data\\
+\hline
+\end{DoxyParams}
+Entries are copied into {\bfseries{tiles}} from the Background Tile Map starting at {\bfseries{x}}, {\bfseries{y}} reading across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles.
+
+One byte per tile.
+
+There are two 32x32 Tile Maps in V\+R\+AM at addresses 9800h -\/ 9B\+F\+Fh and 9C00h -\/ 9F\+F\+Fh.
+
+The buffer pointed to by {\bfseries{tiles}} should be at least {\bfseries{x}} x {\bfseries{y}} bytes in size.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aa6bcf24d97f93307b30f2906251f39a0}{get\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a8a469de4c6640f921254b336b5a6191a}{get\+\_\+win\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a68651e50243349b48164a8ad983dca4e}\label{gb_8h_a68651e50243349b48164a8ad983dca4e}}
+\index{gb.h@{gb.h}!set\_native\_tile\_data@{set\_native\_tile\_data}}
+\index{set\_native\_tile\_data@{set\_native\_tile\_data}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{set\_native\_tile\_data()}{set\_native\_tile\_data()}}
+{\footnotesize\ttfamily void set\+\_\+native\+\_\+tile\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{first\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+tiles, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{data }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets V\+R\+AM Tile Pattern data in the native format
+
+
+\begin{DoxyParams}{Parameters}
+{\em first\+\_\+tile} & Index of the first tile to write (0 -\/ 511) \\
+\hline
+{\em nb\+\_\+tiles} & Number of tiles to write \\
+\hline
+{\em data} & Pointer to source Tile Pattern data.\\
+\hline
+\end{DoxyParams}
+When {\ttfamily first\+\_\+tile} is larger than 256 on the G\+B/\+AP, it will write to sprite data instead of background data.
+
+The bit depth of the source Tile Pattern data depends on which console is being used\+: \begin{DoxyItemize}
+\item Game Boy/\+Analogue Pocket\+: loads 2bpp tiles data \item S\+M\+S/\+GG\+: loads 4bpp tile data \end{DoxyItemize}
+\mbox{\Hypertarget{gb_8h_af6ac67037de041eb0141ba3725b1db83}\label{gb_8h_af6ac67037de041eb0141ba3725b1db83}}
+\index{gb.h@{gb.h}!init\_win@{init\_win}}
+\index{init\_win@{init\_win}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{init\_win()}{init\_win()}}
+{\footnotesize\ttfamily void init\+\_\+win (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{c }\end{DoxyParamCaption})}
+
+Initializes the entire Window Tile Map with Tile Number {\bfseries{c}}
+\begin{DoxyParams}{Parameters}
+{\em c} & Tile number to fill with\\
+\hline
+\end{DoxyParams}
+Note\+: This function avoids writes during modes 2 \& 3 \mbox{\Hypertarget{gb_8h_a46058204097dd305bf72bc20ea7f7a3b}\label{gb_8h_a46058204097dd305bf72bc20ea7f7a3b}}
+\index{gb.h@{gb.h}!init\_bkg@{init\_bkg}}
+\index{init\_bkg@{init\_bkg}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{init\_bkg()}{init\_bkg()}}
+{\footnotesize\ttfamily void init\+\_\+bkg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{c }\end{DoxyParamCaption})}
+
+Initializes the entire Background Tile Map with Tile Number {\bfseries{c}}
+\begin{DoxyParams}{Parameters}
+{\em c} & Tile number to fill with\\
+\hline
+\end{DoxyParams}
+Note\+: This function avoids writes during modes 2 \& 3 \mbox{\Hypertarget{gb_8h_a97bab71effd5e4e386629cb6ca5816cf}\label{gb_8h_a97bab71effd5e4e386629cb6ca5816cf}}
+\index{gb.h@{gb.h}!vmemset@{vmemset}}
+\index{vmemset@{vmemset}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{vmemset()}{vmemset()}}
+{\footnotesize\ttfamily void vmemset (\begin{DoxyParamCaption}\item[{void $\ast$}]{s, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{c, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{n }\end{DoxyParamCaption})}
+
+Fills the V\+R\+AM memory region {\bfseries{s}} of size {\bfseries{n}} with Tile Number {\bfseries{c}}
+\begin{DoxyParams}{Parameters}
+{\em s} & Start address in V\+R\+AM \\
+\hline
+{\em c} & Tile number to fill with \\
+\hline
+{\em n} & Size of memory region (in bytes) to fill\\
+\hline
+\end{DoxyParams}
+Note\+: This function avoids writes during modes 2 \& 3 \mbox{\Hypertarget{gb_8h_a74c3f53fca019f7abcd1270650808849}\label{gb_8h_a74c3f53fca019f7abcd1270650808849}}
+\index{gb.h@{gb.h}!fill\_bkg\_rect@{fill\_bkg\_rect}}
+\index{fill\_bkg\_rect@{fill\_bkg\_rect}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{fill\_bkg\_rect()}{fill\_bkg\_rect()}}
+{\footnotesize\ttfamily void fill\+\_\+bkg\+\_\+rect (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{tile }\end{DoxyParamCaption})}
+
+Fills a rectangular region of Tile Map entries for the Background layer with tile.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 0 -\/ 31 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 0 -\/ 31 \\
+\hline
+{\em tile} & Fill value \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{gb_8h_ad5bc3dc922707507aa51ed7f5b4a21e3}\label{gb_8h_ad5bc3dc922707507aa51ed7f5b4a21e3}}
+\index{gb.h@{gb.h}!fill\_win\_rect@{fill\_win\_rect}}
+\index{fill\_win\_rect@{fill\_win\_rect}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{fill\_win\_rect()}{fill\_win\_rect()}}
+{\footnotesize\ttfamily void fill\+\_\+win\+\_\+rect (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{tile }\end{DoxyParamCaption})}
+
+Fills a rectangular region of Tile Map entries for the Window layer with tile.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 0 -\/ 31 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 0 -\/ 31 \\
+\hline
+{\em tile} & Fill value \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{gb_8h_a0b3366755f3276b0243c1e0497471b7a}\label{gb_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{gb.h@{gb.h}!c@{c}}
+\index{c@{c}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
+\mbox{\Hypertarget{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}\label{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}}
+\index{gb.h@{gb.h}!\_cpu@{\_cpu}}
+\index{\_cpu@{\_cpu}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_cpu}{\_cpu}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+cpu\hspace{0.3cm}{\ttfamily [extern]}}
+
+GB C\+PU type
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a0031c07799247a6d6c1bfa3decac79d0}{D\+M\+G\+\_\+\+T\+Y\+PE}}, \mbox{\hyperlink{gb_8h_ae996ed4fd8bb6b308b9c8708a91df06b}{M\+G\+B\+\_\+\+T\+Y\+PE}}, \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}}, \mbox{\hyperlink{cgb_8h_a884a743919b234cd9c37789380784d08}{cpu\+\_\+fast()}}, \mbox{\hyperlink{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}{cpu\+\_\+slow()}}, \mbox{\hyperlink{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}{\+\_\+is\+\_\+\+G\+BA}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}\label{gb_8h_a539b7b45b1c2d6b2051553665c76fd36}}
+\index{gb.h@{gb.h}!\_is\_GBA@{\_is\_GBA}}
+\index{\_is\_GBA@{\_is\_GBA}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_is\_GBA}{\_is\_GBA}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+is\+\_\+\+G\+BA\hspace{0.3cm}{\ttfamily [extern]}}
+
+G\+BA detection
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a6ccf5d0f34fb0af0b6e73b9df0ccd745}{G\+B\+A\+\_\+\+D\+E\+T\+E\+C\+T\+ED}}, \mbox{\hyperlink{gb_8h_aa311f84dd9fce6e136ba4881e7b0d98d}{G\+B\+A\+\_\+\+N\+O\+T\+\_\+\+D\+E\+T\+E\+C\+T\+ED}}, \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a78d2fd18666afec116f176d46debb4e7}\label{gb_8h_a78d2fd18666afec116f176d46debb4e7}}
+\index{gb.h@{gb.h}!sys\_time@{sys\_time}}
+\index{sys\_time@{sys\_time}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{sys\_time}{sys\_time}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} sys\+\_\+time\hspace{0.3cm}{\ttfamily [extern]}}
+
+Global Time Counter in V\+BL periods (60Hz)
+
+Increments once per Frame
+
+Will wrap around every $\sim$18 minutes (unsigned 16 bits = 65535 / 60 / 60 = 18.\+2) \mbox{\Hypertarget{gb_8h_a2e3415ce2f7fb63427618bd9b9cb6635}\label{gb_8h_a2e3415ce2f7fb63427618bd9b9cb6635}}
+\index{gb.h@{gb.h}!\_io\_status@{\_io\_status}}
+\index{\_io\_status@{\_io\_status}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_io\_status}{\_io\_status}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+io\+\_\+status\hspace{0.3cm}{\ttfamily [extern]}}
+
+Serial Link\+: Current IO Status. An OR of I\+O\+\_\+$\ast$ \mbox{\Hypertarget{gb_8h_a02f3a1585ae654444e628c1aa98ef0cf}\label{gb_8h_a02f3a1585ae654444e628c1aa98ef0cf}}
+\index{gb.h@{gb.h}!\_io\_in@{\_io\_in}}
+\index{\_io\_in@{\_io\_in}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_io\_in}{\_io\_in}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+io\+\_\+in\hspace{0.3cm}{\ttfamily [extern]}}
+
+Serial Link\+: Byte just read after calling \mbox{\hyperlink{gb_8h_a9a7fd7be44bb12bc85a144b732ce02f7}{receive\+\_\+byte()}} \mbox{\Hypertarget{gb_8h_acae13736da20f9fc53e8d38934aa2119}\label{gb_8h_acae13736da20f9fc53e8d38934aa2119}}
+\index{gb.h@{gb.h}!\_io\_out@{\_io\_out}}
+\index{\_io\_out@{\_io\_out}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_io\_out}{\_io\_out}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+io\+\_\+out\hspace{0.3cm}{\ttfamily [extern]}}
+
+Serial Link\+: Write byte to send here before calling \mbox{\hyperlink{gb_8h_ae339d7d8d7e0ebd6691b42608c416964}{send\+\_\+byte()}} \mbox{\Hypertarget{gb_8h_a98b848953a95ce2fff6fda643575d74a}\label{gb_8h_a98b848953a95ce2fff6fda643575d74a}}
+\index{gb.h@{gb.h}!\_current\_bank@{\_current\_bank}}
+\index{\_current\_bank@{\_current\_bank}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_current\_bank}{\_current\_bank}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \+\_\+current\+\_\+bank}
+
+Tracks current active R\+OM bank \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1()}}, \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5()}} This variable is updated automatically when you call \mbox{\hyperlink{gb_8h_a19558f5bbc9fea767f945001ae9cd13f}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C1}} or \mbox{\hyperlink{gb_8h_a92d040284342702026eb19dab59b586e}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M\+\_\+\+M\+B\+C5}}, or call a \mbox{\hyperlink{asm_2types_8h_aa8480aed89a168ec484727f5ac985cd0}{B\+A\+N\+K\+ED}} function.
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{gb_8h_a1f1dfeb2f802fe99f37fe91867b84456}\label{gb_8h_a1f1dfeb2f802fe99f37fe91867b84456}}
+\index{gb.h@{gb.h}!h@{h}}
+\index{h@{h}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{h}{h}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} h}
+
+\mbox{\Hypertarget{gb_8h_af79b920bcb642bba2e652874c4f7eeff}\label{gb_8h_af79b920bcb642bba2e652874c4f7eeff}}
+\index{gb.h@{gb.h}!l@{l}}
+\index{l@{l}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{l}{l}}
+{\footnotesize\ttfamily void l}
+
+{\bfseries Initial value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\{}
+\DoxyCodeLine{ \_\_asm\_\_(\textcolor{stringliteral}{"{}ei"{}})}
+
+\end{DoxyCode}
+\mbox{\Hypertarget{gb_8h_a4c2e4adef74067fdbb49005bc73de937}\label{gb_8h_a4c2e4adef74067fdbb49005bc73de937}}
+\index{gb.h@{gb.h}!b@{b}}
+\index{b@{b}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{b}{b}}
+{\footnotesize\ttfamily void b}
+
+\mbox{\Hypertarget{gb_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}\label{gb_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}}
+\index{gb.h@{gb.h}!d@{d}}
+\index{d@{d}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{d}{d}}
+{\footnotesize\ttfamily void d}
+
+\mbox{\Hypertarget{gb_8h_aeda4515a31485c9688c4601ac5ce2d79}\label{gb_8h_aeda4515a31485c9688c4601ac5ce2d79}}
+\index{gb.h@{gb.h}!e@{e}}
+\index{e@{e}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{e}{e}}
+{\footnotesize\ttfamily void e}
+
+\mbox{\Hypertarget{gb_8h_a250f5339e05523912926be566e9eb8c0}\label{gb_8h_a250f5339e05523912926be566e9eb8c0}}
+\index{gb.h@{gb.h}!\_current\_1bpp\_colors@{\_current\_1bpp\_colors}}
+\index{\_current\_1bpp\_colors@{\_current\_1bpp\_colors}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_current\_1bpp\_colors}{\_current\_1bpp\_colors}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \+\_\+current\+\_\+1bpp\+\_\+colors\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_8h_aa82205e9629f984d0b3dc8055c211522}\label{gb_8h_aa82205e9629f984d0b3dc8055c211522}}
+\index{gb.h@{gb.h}!\_map\_tile\_offset@{\_map\_tile\_offset}}
+\index{\_map\_tile\_offset@{\_map\_tile\_offset}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_map\_tile\_offset}{\_map\_tile\_offset}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+map\+\_\+tile\+\_\+offset\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_8h_ab472d9bbb1bcfd141374f5babc71934c}\label{gb_8h_ab472d9bbb1bcfd141374f5babc71934c}}
+\index{gb.h@{gb.h}!\_submap\_tile\_offset@{\_submap\_tile\_offset}}
+\index{\_submap\_tile\_offset@{\_submap\_tile\_offset}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_submap\_tile\_offset}{\_submap\_tile\_offset}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+submap\+\_\+tile\+\_\+offset\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{gb_8h_a3619f9cb1e3c92238a033ead79a0c551}\label{gb_8h_a3619f9cb1e3c92238a033ead79a0c551}}
+\index{gb.h@{gb.h}!shadow\_OAM@{shadow\_OAM}}
+\index{shadow\_OAM@{shadow\_OAM}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{shadow\_OAM}{shadow\_OAM}}
+{\footnotesize\ttfamily volatile struct \mbox{\hyperlink{struct_o_a_m__item__t}{O\+A\+M\+\_\+item\+\_\+t}} shadow\+\_\+\+O\+AM\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [extern]}}
+
+Shadow O\+AM array in W\+R\+AM, that is D\+M\+A-\/transferred into the real O\+AM each V\+Blank \mbox{\Hypertarget{gb_8h_a7b662ae4d83f9837bacb9fd580673054}\label{gb_8h_a7b662ae4d83f9837bacb9fd580673054}}
+\index{gb.h@{gb.h}!\_shadow\_OAM\_base@{\_shadow\_OAM\_base}}
+\index{\_shadow\_OAM\_base@{\_shadow\_OAM\_base}!gb.h@{gb.h}}
+\doxyparagraph{\texorpdfstring{\_shadow\_OAM\_base}{\_shadow\_OAM\_base}}
+{\footnotesize\ttfamily \mbox{\hyperlink{gb_2hardware_8h_a0b42e4dadd74c927e8b801b4f42c0e44}{\+\_\+\+\_\+\+R\+EG}} \+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}
+
+M\+SB of shadow\+\_\+\+O\+AM address is used by O\+AM D\+MA copying routine
\ No newline at end of file
diff --git a/docs/latex/gbdk-lib_8h.tex b/docs/latex/gbdk-lib_8h.tex
new file mode 100644
index 00000000..dbbf3368
--- /dev/null
+++ b/docs/latex/gbdk-lib_8h.tex
@@ -0,0 +1,7 @@
+\hypertarget{gbdk-lib_8h}{}\doxysubsection{gbdk/gbdk-\/lib.h File Reference}
+\label{gbdk-lib_8h}\index{gbdk/gbdk-\/lib.h@{gbdk/gbdk-\/lib.h}}
+{\ttfamily \#include $<$asm/gbz80/provides.\+h$>$}\newline
+
+
+\doxysubsubsection{Detailed Description}
+Settings for the greater library system.
\ No newline at end of file
diff --git a/docs/latex/gbdk_2gbdecompress_8h.tex b/docs/latex/gbdk_2gbdecompress_8h.tex
new file mode 100644
index 00000000..2e842044
--- /dev/null
+++ b/docs/latex/gbdk_2gbdecompress_8h.tex
@@ -0,0 +1,3 @@
+\hypertarget{gbdk_2gbdecompress_8h}{}\doxysubsection{gbdk/gbdecompress.h File Reference}
+\label{gbdk_2gbdecompress_8h}\index{gbdk/gbdecompress.h@{gbdk/gbdecompress.h}}
+{\ttfamily \#include $<$gb/gbdecompress.\+h$>$}\newline
diff --git a/docs/latex/gbdk_2metasprites_8h.tex b/docs/latex/gbdk_2metasprites_8h.tex
new file mode 100644
index 00000000..84effd6a
--- /dev/null
+++ b/docs/latex/gbdk_2metasprites_8h.tex
@@ -0,0 +1,3 @@
+\hypertarget{gbdk_2metasprites_8h}{}\doxysubsection{gbdk/metasprites.h File Reference}
+\label{gbdk_2metasprites_8h}\index{gbdk/metasprites.h@{gbdk/metasprites.h}}
+{\ttfamily \#include $<$gb/metasprites.\+h$>$}\newline
diff --git a/docs/latex/gbz80_2provides_8h.tex b/docs/latex/gbz80_2provides_8h.tex
new file mode 100644
index 00000000..11d376a7
--- /dev/null
+++ b/docs/latex/gbz80_2provides_8h.tex
@@ -0,0 +1,32 @@
+\hypertarget{gbz80_2provides_8h}{}\doxysubsection{asm/gbz80/provides.h File Reference}
+\label{gbz80_2provides_8h}\index{asm/gbz80/provides.h@{asm/gbz80/provides.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{gbz80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}{U\+S\+E\+\_\+\+C\+\_\+\+M\+E\+M\+C\+PY}}~0
+\item
+\#define \mbox{\hyperlink{gbz80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}{U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+PY}}~0
+\item
+\#define \mbox{\hyperlink{gbz80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}{U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+MP}}~0
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{gbz80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}\label{gbz80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}}
+\index{provides.h@{provides.h}!USE\_C\_MEMCPY@{USE\_C\_MEMCPY}}
+\index{USE\_C\_MEMCPY@{USE\_C\_MEMCPY}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_MEMCPY}{USE\_C\_MEMCPY}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+M\+E\+M\+C\+PY~0}
+
+\mbox{\Hypertarget{gbz80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}\label{gbz80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}}
+\index{provides.h@{provides.h}!USE\_C\_STRCPY@{USE\_C\_STRCPY}}
+\index{USE\_C\_STRCPY@{USE\_C\_STRCPY}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_STRCPY}{USE\_C\_STRCPY}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+PY~0}
+
+\mbox{\Hypertarget{gbz80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}\label{gbz80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}}
+\index{provides.h@{provides.h}!USE\_C\_STRCMP@{USE\_C\_STRCMP}}
+\index{USE\_C\_STRCMP@{USE\_C\_STRCMP}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_STRCMP}{USE\_C\_STRCMP}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+MP~0}
+
diff --git a/docs/latex/group__gbdk__fonts.tex b/docs/latex/group__gbdk__fonts.tex
new file mode 100644
index 00000000..60874b39
--- /dev/null
+++ b/docs/latex/group__gbdk__fonts.tex
@@ -0,0 +1,52 @@
+\hypertarget{group__gbdk__fonts}{}\doxysubsection{List of gbdk fonts}
+\label{group__gbdk__fonts}\index{List of gbdk fonts@{List of gbdk fonts}}
+
+
+\doxysubsubsection{Description}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga1b59bbd85c12436eeef52d4c32c7345d}{font\+\_\+spect}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga17e825a65ba38f34a658fe0a2c99d8d4}{font\+\_\+italic}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_ga6dcb04fed78fc39b95171988b776e6bb}{font\+\_\+ibm}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_gad8497ecbd9d845fc24a56688f157aad8}{font\+\_\+min}} \mbox{[}$\,$\mbox{]}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{group__gbdk__fonts_gab8c52bed73e745f1ee910f2da60ddb4c}{font\+\_\+ibm\+\_\+fixed}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{group__gbdk__fonts_ga1b59bbd85c12436eeef52d4c32c7345d}\label{group__gbdk__fonts_ga1b59bbd85c12436eeef52d4c32c7345d}}
+\index{List of gbdk fonts@{List of gbdk fonts}!font\_spect@{font\_spect}}
+\index{font\_spect@{font\_spect}!List of gbdk fonts@{List of gbdk fonts}}
+\doxyparagraph{\texorpdfstring{font\_spect}{font\_spect}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} font\+\_\+spect\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [extern]}}
+
+The default fonts \mbox{\Hypertarget{group__gbdk__fonts_ga17e825a65ba38f34a658fe0a2c99d8d4}\label{group__gbdk__fonts_ga17e825a65ba38f34a658fe0a2c99d8d4}}
+\index{List of gbdk fonts@{List of gbdk fonts}!font\_italic@{font\_italic}}
+\index{font\_italic@{font\_italic}!List of gbdk fonts@{List of gbdk fonts}}
+\doxyparagraph{\texorpdfstring{font\_italic}{font\_italic}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} font\+\_\+italic\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{group__gbdk__fonts_ga6dcb04fed78fc39b95171988b776e6bb}\label{group__gbdk__fonts_ga6dcb04fed78fc39b95171988b776e6bb}}
+\index{List of gbdk fonts@{List of gbdk fonts}!font\_ibm@{font\_ibm}}
+\index{font\_ibm@{font\_ibm}!List of gbdk fonts@{List of gbdk fonts}}
+\doxyparagraph{\texorpdfstring{font\_ibm}{font\_ibm}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} font\+\_\+ibm\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{group__gbdk__fonts_gad8497ecbd9d845fc24a56688f157aad8}\label{group__gbdk__fonts_gad8497ecbd9d845fc24a56688f157aad8}}
+\index{List of gbdk fonts@{List of gbdk fonts}!font\_min@{font\_min}}
+\index{font\_min@{font\_min}!List of gbdk fonts@{List of gbdk fonts}}
+\doxyparagraph{\texorpdfstring{font\_min}{font\_min}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} font\+\_\+min\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{group__gbdk__fonts_gab8c52bed73e745f1ee910f2da60ddb4c}\label{group__gbdk__fonts_gab8c52bed73e745f1ee910f2da60ddb4c}}
+\index{List of gbdk fonts@{List of gbdk fonts}!font\_ibm\_fixed@{font\_ibm\_fixed}}
+\index{font\_ibm\_fixed@{font\_ibm\_fixed}!List of gbdk fonts@{List of gbdk fonts}}
+\doxyparagraph{\texorpdfstring{font\_ibm\_fixed}{font\_ibm\_fixed}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} font\+\_\+ibm\+\_\+fixed\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [extern]}}
+
+Backwards compatible font
\ No newline at end of file
diff --git a/docs/latex/incbin_8h.tex b/docs/latex/incbin_8h.tex
new file mode 100644
index 00000000..5f625921
--- /dev/null
+++ b/docs/latex/incbin_8h.tex
@@ -0,0 +1,118 @@
+\hypertarget{incbin_8h}{}\doxysubsection{gbdk/incbin.h File Reference}
+\label{incbin_8h}\index{gbdk/incbin.h@{gbdk/incbin.h}}
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+RN}}(V\+A\+R\+N\+A\+ME)
+\item
+\#define \mbox{\hyperlink{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}{I\+N\+C\+B\+I\+N\+\_\+\+S\+I\+ZE}}(V\+A\+R\+N\+A\+ME)~( (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}) \& \+\_\+\+\_\+size\+\_\+ \#\# V\+A\+R\+N\+A\+ME )
+\item
+\#define \mbox{\hyperlink{incbin_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+NK}}(V\+A\+R\+N\+A\+ME)~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )
+\item
+\#define \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+IN}}(V\+A\+R\+N\+A\+ME, F\+I\+L\+E\+P\+A\+TH)
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Allows binary data from other files to be included into a C source file.
+
+It is implemented using asm .incbin and macros.
+
+See the {\ttfamily incbin} example project for a demo of how to use it.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}\label{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}}
+\index{incbin.h@{incbin.h}!INCBIN\_EXTERN@{INCBIN\_EXTERN}}
+\index{INCBIN\_EXTERN@{INCBIN\_EXTERN}!incbin.h@{incbin.h}}
+\doxyparagraph{\texorpdfstring{INCBIN\_EXTERN}{INCBIN\_EXTERN}}
+{\footnotesize\ttfamily \#define I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+RN(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{keyword}{extern} \textcolor{keyword}{const} \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} VARNAME[]; \(\backslash\)}
+\DoxyCodeLine{extern \textcolor{keyword}{const} \textcolor{keywordtype}{void} \_\_size\_ \#\# VARNAME; \(\backslash\)}
+\DoxyCodeLine{extern \textcolor{keyword}{const} \textcolor{keywordtype}{void} \_\_bank\_ \#\# VARNAME;}
+
+\end{DoxyCode}
+Creates extern entries for accessing a \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}} generated variable and it\textquotesingle{}s size in another source file.
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable used with I\+N\+C\+B\+IN\\
+\hline
+\end{DoxyParams}
+An entry is created for the variable and it\textquotesingle{}s size variable.
+
+\mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}}, \mbox{\hyperlink{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}{I\+N\+C\+B\+I\+N\+\_\+\+S\+I\+Z\+E()}} \mbox{\Hypertarget{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}\label{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}}
+\index{incbin.h@{incbin.h}!INCBIN\_SIZE@{INCBIN\_SIZE}}
+\index{INCBIN\_SIZE@{INCBIN\_SIZE}!incbin.h@{incbin.h}}
+\doxyparagraph{\texorpdfstring{INCBIN\_SIZE}{INCBIN\_SIZE}}
+{\footnotesize\ttfamily \#define I\+N\+C\+B\+I\+N\+\_\+\+S\+I\+ZE(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~( (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}) \& \+\_\+\+\_\+size\+\_\+ \#\# V\+A\+R\+N\+A\+ME )}
+
+Obtains the {\bfseries{size in bytes}} of the \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}} generated data
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable used with I\+N\+C\+B\+IN\\
+\hline
+\end{DoxyParams}
+Requires \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}} to have been called earlier in the source file
+
+\mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}}, \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}} \mbox{\Hypertarget{incbin_8h_a42705001e2b9897f5167b67fb36c69dd}\label{incbin_8h_a42705001e2b9897f5167b67fb36c69dd}}
+\index{incbin.h@{incbin.h}!BANK@{BANK}}
+\index{BANK@{BANK}!incbin.h@{incbin.h}}
+\doxyparagraph{\texorpdfstring{BANK}{BANK}}
+{\footnotesize\ttfamily \#define B\+A\+NK(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )}
+
+Obtains the {\bfseries{bank number}} of the \mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}} generated data
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable used with I\+N\+C\+B\+IN\\
+\hline
+\end{DoxyParams}
+Requires \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}} to have been called earlier in the source file
+
+\mbox{\hyperlink{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}{I\+N\+C\+B\+I\+N()}}, \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}} \mbox{\Hypertarget{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}\label{incbin_8h_af34047ed60abd6453f819c2a5230cd2b}}
+\index{incbin.h@{incbin.h}!INCBIN@{INCBIN}}
+\index{INCBIN@{INCBIN}!incbin.h@{incbin.h}}
+\doxyparagraph{\texorpdfstring{INCBIN}{INCBIN}}
+{\footnotesize\ttfamily \#define I\+N\+C\+B\+IN(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME, }\item[{}]{F\+I\+L\+E\+P\+A\+TH }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{keywordtype}{void} \_\_func\_ \#\# VARNAME() \_\_banked \_\_naked \{ \(\backslash\)}
+\DoxyCodeLine{\_\_asm \(\backslash\)}
+\DoxyCodeLine{\_ \#\# VARNAME:: \(\backslash\)}
+\DoxyCodeLine{1\$: \(\backslash\)}
+\DoxyCodeLine{ .incbin FILEPATH \(\backslash\)}
+\DoxyCodeLine{2\$: \(\backslash\)}
+\DoxyCodeLine{ \_\_\_size\_ \#\# VARNAME = (2\$-\/1\$) \(\backslash\)}
+\DoxyCodeLine{ .globl \_\_\_size\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ .local b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ \_\_\_bank\_ \#\# VARNAME = b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ .globl \_\_\_bank\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{\_\_endasm; \(\backslash\)}
+\DoxyCodeLine{\}}
+
+\end{DoxyCode}
+Includes binary data into a C source file
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Variable name to use \\
+\hline
+{\em F\+I\+L\+E\+P\+A\+TH} & Path to the file which will be binary included into the C source file\\
+\hline
+\end{DoxyParams}
+{\bfseries{filepath}} is relative to the working directory of the tool that is calling it (often a makefile\textquotesingle{}s working directory), {\bfseries{N\+OT}} to the file it\textquotesingle{}s being included into.
+
+The variable name is not modified and can be used as-\/is.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{incbin_8h_aeacb5370285c0d4308d0fe5f29da8d15}{I\+N\+C\+B\+I\+N\+\_\+\+S\+I\+Z\+E()}} for obtaining the size of the included data.
+
+\mbox{\hyperlink{incbin_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}} for obtaining the bank number of the included data.
+\end{DoxySeeAlso}
+Use \mbox{\hyperlink{incbin_8h_a51ab79f8ee37368158b1887b65ef97ec}{I\+N\+C\+B\+I\+N\+\_\+\+E\+X\+T\+E\+R\+N()}} within another source file to make the variable and it\textquotesingle{}s data accesible there.
\ No newline at end of file
diff --git a/docs/latex/index.tex b/docs/latex/index.tex
new file mode 100644
index 00000000..0e14c54e
--- /dev/null
+++ b/docs/latex/index.tex
@@ -0,0 +1,51 @@
+\label{index_docs_index}%
+\Hypertarget{index_docs_index}%
+
+\begin{DoxyItemize}
+\item \mbox{\hyperlink{docs_getting_started}{Getting Started}}
+\item \mbox{\hyperlink{docs_links_and_tools}{Links and Third-\/\+Party Tools}}
+\item \mbox{\hyperlink{docs_using_gbdk}{Using G\+B\+DK}}
+\item \mbox{\hyperlink{docs_coding_guidelines}{Coding Guidelines}}
+\item \mbox{\hyperlink{docs_rombanking_mbcs}{R\+O\+M/\+R\+AM Banking and M\+B\+Cs}}
+\item \mbox{\hyperlink{docs_supported_consoles}{Supported Consoles \& Cross Compiling}}
+\item \mbox{\hyperlink{docs_toolchain}{G\+B\+DK Toolchain}}
+\item \mbox{\hyperlink{docs_example_programs}{Example Programs}}
+\item \mbox{\hyperlink{docs_faq}{Frequently Asked Questions (F\+AQ)}}
+\item \mbox{\hyperlink{docs_migrating_versions}{Migrating to new G\+B\+DK Versions}}
+\item \mbox{\hyperlink{docs_releases}{G\+B\+DK Releases}}
+\item \mbox{\hyperlink{docs_toolchain_settings}{Toolchain settings}}
+\end{DoxyItemize}\hypertarget{index_autotoc_md217}{}\doxysubsection{Introduction}\label{index_autotoc_md217}
+Welcome to G\+B\+D\+K-\/2020! The best thing to do is head over to the \mbox{\hyperlink{docs_getting_started}{Getting Started}} section to get up and running.\hypertarget{index_autotoc_md218}{}\doxysubsection{About the Documentation}\label{index_autotoc_md218}
+This documentation is partially based on material written by the original G\+B\+DK authors in 1999 and updated for G\+B\+D\+K-\/2020. The A\+PI docs are automatically generated from the C header files using Doxygen.
+
+G\+B\+D\+K-\/2020 is an updated version of the original G\+B\+DK with a modernized S\+D\+CC toolchain and many A\+PI improvements and fixes. It can be found at\+: \href{https://github.com/gbdk-2020/gbdk-2020/}{\texttt{ https\+://github.\+com/gbdk-\/2020/gbdk-\/2020/}}.
+
+The original G\+B\+DK sources, documentation and website are at\+: \href{http://gbdk.sourceforge.net/}{\texttt{ http\+://gbdk.\+sourceforge.\+net/}}\hypertarget{index_autotoc_md219}{}\doxysubsection{About G\+B\+DK}\label{index_autotoc_md219}
+The Game\+Boy Developer\textquotesingle{}s Kit (G\+B\+DK, G\+B\+D\+K-\/2020) is used to develop games and programs for the Nintendo Game Boy (and some other consoles) in C and assembly. G\+B\+DK includes a set of libraries for the most common requirements and generates image files for use with a real Game\+Boy or emulators.
+
+G\+B\+DK features\+:
+\begin{DoxyItemize}
+\item C and A\+SM toolchain based on S\+D\+CC with some support utilities
+\item A set of libraries with source code
+\item Example programs in A\+SM and in C
+\item Support for multiple R\+OM bank images and auto-\/banking
+\item Support for multiple consoles\+: Game Boy, Analogue Pocket, Mega Duck, Master System and Game Gear
+\end{DoxyItemize}
+
+G\+B\+DK is freeware. Most of the tooling code is under the G\+PL. The runtime libraries should be under the L\+G\+PL. Please consider mentioning G\+B\+DK in the credits of projects made with it.
+
+\DoxyHorRuler{0}
+\hypertarget{index_autotoc_md220}{}\doxysubsection{Historical Info and Links}\label{index_autotoc_md220}
+Work on the original G\+B\+DK (pre-\/2020) was by\+:
+
+Pascal Felber, Lars Malmborg, Michael Hope, David Galloway (djmips), and others.
+
+The following is from the original G\+B\+DK documentation\+:
+
+Thanks to quang for many of the comments to the gb functions. Some of the comments are ripped directly from the Linux Programmers manual, and some directly from the pan/k00\+Pa document.
+
+\href{http://quangdx.com/}{\texttt{ quang\+D\+X.\+com}}
+
+\href{http://gbdk.sourceforge.net/}{\texttt{ The (original) gbdk homepage}}
+
+\href{http://www.devrs.com/gb/}{\texttt{ Jeff Frohwein\textquotesingle{}s GB development page.}} A extensive source of Game Boy related information, including Gee\+Bee\textquotesingle{}s GB faq and the pan/k00\+Pa document.
\ No newline at end of file
diff --git a/docs/latex/isr_8h.tex b/docs/latex/isr_8h.tex
new file mode 100644
index 00000000..b431d49e
--- /dev/null
+++ b/docs/latex/isr_8h.tex
@@ -0,0 +1,134 @@
+\hypertarget{isr_8h}{}\doxysubsection{gb/isr.h File Reference}
+\label{isr_8h}\index{gb/isr.h@{gb/isr.h}}
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}}
+\item
+struct \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{isr_8h_a2cf2cba8468992868fe1f6b6448ffae2}{V\+E\+C\+T\+O\+R\+\_\+\+S\+T\+AT}}~0x48
+\item
+\#define \mbox{\hyperlink{isr_8h_a84ca82d76186433c1ec77fde7652b827}{V\+E\+C\+T\+O\+R\+\_\+\+T\+I\+M\+ER}}~0x50
+\item
+\#define \mbox{\hyperlink{isr_8h_a9c51a56a79576c33fcc98579bf7153a1}{V\+E\+C\+T\+O\+R\+\_\+\+S\+E\+R\+I\+AL}}~0x58
+\item
+\#define \mbox{\hyperlink{isr_8h_ac93f10ff354ca76f4030f64a8496303f}{V\+E\+C\+T\+O\+R\+\_\+\+J\+O\+Y\+P\+AD}}~0x60
+\item
+\#define \mbox{\hyperlink{isr_8h_a73769fed9338af86fdb7df35d7b82620}{I\+S\+R\+\_\+\+V\+E\+C\+T\+OR}}(A\+D\+DR, F\+U\+NC)~static const \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}} \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{AT}}((A\+D\+DR)) \+\_\+\+\_\+\+I\+S\+R\+\_\+ \#\# A\+D\+DR = \{0xc3, (void $\ast$)\&(F\+U\+NC)\};
+\item
+\#define \mbox{\hyperlink{isr_8h_a78f9ef588aaf221023e48899898d566b}{I\+S\+R\+\_\+\+N\+E\+S\+T\+E\+D\+\_\+\+V\+E\+C\+T\+OR}}(A\+D\+DR, F\+U\+NC)~static const \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}} \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{AT}}((A\+D\+DR)) \+\_\+\+\_\+\+I\+S\+R\+\_\+ \#\# A\+D\+DR = \{\{0xfb, 0xc3\}, (void $\ast$)\&(F\+U\+NC)\};
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef struct \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}} \mbox{\hyperlink{isr_8h_a40dca48ca391581d7f67d8697533cf30}{isr\+\_\+vector\+\_\+t}}
+\item
+typedef struct \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}} \mbox{\hyperlink{isr_8h_a99e64ac886740db0eb63d8ed0235b5c7}{isr\+\_\+nested\+\_\+vector\+\_\+t}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Macros for creating raw interrupt service routines (I\+S\+Rs) which do not use the default G\+B\+DK I\+SR dispatcher.
+
+Handlers installed this way will have less overhead than ones which use the G\+B\+DK I\+SR dispatcher.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{isr_8h_a2cf2cba8468992868fe1f6b6448ffae2}\label{isr_8h_a2cf2cba8468992868fe1f6b6448ffae2}}
+\index{isr.h@{isr.h}!VECTOR\_STAT@{VECTOR\_STAT}}
+\index{VECTOR\_STAT@{VECTOR\_STAT}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{VECTOR\_STAT}{VECTOR\_STAT}}
+{\footnotesize\ttfamily \#define V\+E\+C\+T\+O\+R\+\_\+\+S\+T\+AT~0x48}
+
+Address for the S\+T\+AT interrupt vector \mbox{\Hypertarget{isr_8h_a84ca82d76186433c1ec77fde7652b827}\label{isr_8h_a84ca82d76186433c1ec77fde7652b827}}
+\index{isr.h@{isr.h}!VECTOR\_TIMER@{VECTOR\_TIMER}}
+\index{VECTOR\_TIMER@{VECTOR\_TIMER}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{VECTOR\_TIMER}{VECTOR\_TIMER}}
+{\footnotesize\ttfamily \#define V\+E\+C\+T\+O\+R\+\_\+\+T\+I\+M\+ER~0x50}
+
+Address for the T\+I\+M\+ER interrupt vector \mbox{\Hypertarget{isr_8h_a9c51a56a79576c33fcc98579bf7153a1}\label{isr_8h_a9c51a56a79576c33fcc98579bf7153a1}}
+\index{isr.h@{isr.h}!VECTOR\_SERIAL@{VECTOR\_SERIAL}}
+\index{VECTOR\_SERIAL@{VECTOR\_SERIAL}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{VECTOR\_SERIAL}{VECTOR\_SERIAL}}
+{\footnotesize\ttfamily \#define V\+E\+C\+T\+O\+R\+\_\+\+S\+E\+R\+I\+AL~0x58}
+
+Address for the S\+E\+R\+I\+AL interrupt vector \mbox{\Hypertarget{isr_8h_ac93f10ff354ca76f4030f64a8496303f}\label{isr_8h_ac93f10ff354ca76f4030f64a8496303f}}
+\index{isr.h@{isr.h}!VECTOR\_JOYPAD@{VECTOR\_JOYPAD}}
+\index{VECTOR\_JOYPAD@{VECTOR\_JOYPAD}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{VECTOR\_JOYPAD}{VECTOR\_JOYPAD}}
+{\footnotesize\ttfamily \#define V\+E\+C\+T\+O\+R\+\_\+\+J\+O\+Y\+P\+AD~0x60}
+
+Address for the J\+O\+Y\+P\+AD interrupt vector \mbox{\Hypertarget{isr_8h_a73769fed9338af86fdb7df35d7b82620}\label{isr_8h_a73769fed9338af86fdb7df35d7b82620}}
+\index{isr.h@{isr.h}!ISR\_VECTOR@{ISR\_VECTOR}}
+\index{ISR\_VECTOR@{ISR\_VECTOR}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{ISR\_VECTOR}{ISR\_VECTOR}}
+{\footnotesize\ttfamily \#define I\+S\+R\+\_\+\+V\+E\+C\+T\+OR(\begin{DoxyParamCaption}\item[{}]{A\+D\+DR, }\item[{}]{F\+U\+NC }\end{DoxyParamCaption})~static const \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}} \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{AT}}((A\+D\+DR)) \+\_\+\+\_\+\+I\+S\+R\+\_\+ \#\# A\+D\+DR = \{0xc3, (void $\ast$)\&(F\+U\+NC)\};}
+
+Creates an interrupt vector at the given address for a raw interrupt service routine (which does not use the G\+B\+DK I\+SR dispatcher)
+
+
+\begin{DoxyParams}{Parameters}
+{\em A\+D\+DR} & Address of the interrupt vector, any of\+: \mbox{\hyperlink{isr_8h_a2cf2cba8468992868fe1f6b6448ffae2}{V\+E\+C\+T\+O\+R\+\_\+\+S\+T\+AT}}, \mbox{\hyperlink{isr_8h_a84ca82d76186433c1ec77fde7652b827}{V\+E\+C\+T\+O\+R\+\_\+\+T\+I\+M\+ER}}, \mbox{\hyperlink{isr_8h_a9c51a56a79576c33fcc98579bf7153a1}{V\+E\+C\+T\+O\+R\+\_\+\+S\+E\+R\+I\+AL}}, \mbox{\hyperlink{isr_8h_ac93f10ff354ca76f4030f64a8496303f}{V\+E\+C\+T\+O\+R\+\_\+\+J\+O\+Y\+P\+AD}} \\
+\hline
+{\em F\+U\+NC} & I\+SR function supplied by the user\\
+\hline
+\end{DoxyParams}
+This cannot be used with the V\+B\+L\+A\+NK interrupt.
+
+Do not use this in combination with interrupt installers that rely on the default G\+B\+DK I\+SR dispatcher such as \mbox{\hyperlink{gb_8h_a028d1a2e820951bb4f103d6469975ffb}{add\+\_\+\+T\+I\+M()}}, \mbox{\hyperlink{gb_8h_a142f6c7755fce8b1148faf658d8ec147}{remove\+\_\+\+T\+I\+M()}} (and the same for all other interrupts).
+
+Example\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{isr_8h}{gb/isr.h}}>}}
+\DoxyCodeLine{}
+\DoxyCodeLine{\textcolor{keywordtype}{void} TimerISR() \_\_critical \_\_interrupt \{}
+\DoxyCodeLine{\textcolor{comment}{// some ISR code here}}
+\DoxyCodeLine{\}}
+\DoxyCodeLine{}
+\DoxyCodeLine{\mbox{\hyperlink{isr_8h_a73769fed9338af86fdb7df35d7b82620}{ISR\_VECTOR}}(\mbox{\hyperlink{isr_8h_a84ca82d76186433c1ec77fde7652b827}{VECTOR\_TIMER}}, TimerISR)}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{isr_8h_a78f9ef588aaf221023e48899898d566b}{I\+S\+R\+\_\+\+N\+E\+S\+T\+E\+D\+\_\+\+V\+E\+C\+T\+OR}}, \mbox{\hyperlink{sms_8h_aefda0091b2934571a11e07b512735f50}{set\+\_\+interrupts}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{isr_8h_a78f9ef588aaf221023e48899898d566b}\label{isr_8h_a78f9ef588aaf221023e48899898d566b}}
+\index{isr.h@{isr.h}!ISR\_NESTED\_VECTOR@{ISR\_NESTED\_VECTOR}}
+\index{ISR\_NESTED\_VECTOR@{ISR\_NESTED\_VECTOR}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{ISR\_NESTED\_VECTOR}{ISR\_NESTED\_VECTOR}}
+{\footnotesize\ttfamily \#define I\+S\+R\+\_\+\+N\+E\+S\+T\+E\+D\+\_\+\+V\+E\+C\+T\+OR(\begin{DoxyParamCaption}\item[{}]{A\+D\+DR, }\item[{}]{F\+U\+NC }\end{DoxyParamCaption})~static const \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}} \mbox{\hyperlink{asm_2types_8h_a66d3e9555a86fa871932c5f60834c67e}{AT}}((A\+D\+DR)) \+\_\+\+\_\+\+I\+S\+R\+\_\+ \#\# A\+D\+DR = \{\{0xfb, 0xc3\}, (void $\ast$)\&(F\+U\+NC)\};}
+
+Creates an interrupt vector at the given address for a raw interrupt service routine allowing nested interrupts
+
+
+\begin{DoxyParams}{Parameters}
+{\em A\+D\+DR} & Address of the interrupt vector, any of\+: \mbox{\hyperlink{isr_8h_a2cf2cba8468992868fe1f6b6448ffae2}{V\+E\+C\+T\+O\+R\+\_\+\+S\+T\+AT}}, \mbox{\hyperlink{isr_8h_a84ca82d76186433c1ec77fde7652b827}{V\+E\+C\+T\+O\+R\+\_\+\+T\+I\+M\+ER}}, \mbox{\hyperlink{isr_8h_a9c51a56a79576c33fcc98579bf7153a1}{V\+E\+C\+T\+O\+R\+\_\+\+S\+E\+R\+I\+AL}}, \mbox{\hyperlink{isr_8h_ac93f10ff354ca76f4030f64a8496303f}{V\+E\+C\+T\+O\+R\+\_\+\+J\+O\+Y\+P\+AD}} \\
+\hline
+{\em F\+U\+NC} & I\+SR function\\
+\hline
+\end{DoxyParams}
+This cannot be used with the V\+B\+L\+A\+NK interrupt
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{isr_8h_a73769fed9338af86fdb7df35d7b82620}{I\+S\+R\+\_\+\+V\+E\+C\+T\+OR}}
+\end{DoxySeeAlso}
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{isr_8h_a40dca48ca391581d7f67d8697533cf30}\label{isr_8h_a40dca48ca391581d7f67d8697533cf30}}
+\index{isr.h@{isr.h}!isr\_vector\_t@{isr\_vector\_t}}
+\index{isr\_vector\_t@{isr\_vector\_t}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{isr\_vector\_t}{isr\_vector\_t}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}} \mbox{\hyperlink{structisr__vector__t}{isr\+\_\+vector\+\_\+t}}}
+
+\mbox{\Hypertarget{isr_8h_a99e64ac886740db0eb63d8ed0235b5c7}\label{isr_8h_a99e64ac886740db0eb63d8ed0235b5c7}}
+\index{isr.h@{isr.h}!isr\_nested\_vector\_t@{isr\_nested\_vector\_t}}
+\index{isr\_nested\_vector\_t@{isr\_nested\_vector\_t}!isr.h@{isr.h}}
+\doxyparagraph{\texorpdfstring{isr\_nested\_vector\_t}{isr\_nested\_vector\_t}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}} \mbox{\hyperlink{structisr__nested__vector__t}{isr\+\_\+nested\+\_\+vector\+\_\+t}}}
+
diff --git a/docs/latex/k_2bcd_8h.tex b/docs/latex/k_2bcd_8h.tex
new file mode 100644
index 00000000..ee09485c
--- /dev/null
+++ b/docs/latex/k_2bcd_8h.tex
@@ -0,0 +1,3 @@
+\hypertarget{k_2bcd_8h}{}\doxysubsection{gbdk/bcd.h File Reference}
+\label{k_2bcd_8h}\index{gbdk/bcd.h@{gbdk/bcd.h}}
+{\ttfamily \#include $<$gb/bcd.\+h$>$}\newline
diff --git a/docs/latex/limits_8h.tex b/docs/latex/limits_8h.tex
new file mode 100644
index 00000000..3cf35b27
--- /dev/null
+++ b/docs/latex/limits_8h.tex
@@ -0,0 +1,152 @@
+\hypertarget{limits_8h}{}\doxysubsection{limits.\+h File Reference}
+\label{limits_8h}\index{limits.h@{limits.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{limits_8h_a308d9dd2c0028ddb184b455bbd7865de}{C\+H\+A\+R\+\_\+\+B\+IT}}~8 /$\ast$ bits in a char $\ast$/
+\item
+\#define \mbox{\hyperlink{limits_8h_a8c13fdd8c2840edf0cb04a65297037bb}{S\+C\+H\+A\+R\+\_\+\+M\+AX}}~127
+\item
+\#define \mbox{\hyperlink{limits_8h_aa05d197000ad5c143ada0fcd9379b236}{S\+C\+H\+A\+R\+\_\+\+M\+IN}}~-\/128
+\item
+\#define \mbox{\hyperlink{limits_8h_a4066e640ee269d5d8f83ff6643b7af5f}{U\+C\+H\+A\+R\+\_\+\+M\+AX}}~0xff
+\item
+\#define \mbox{\hyperlink{limits_8h_a778eefd6535a9d4b752fca5dd0af58db}{C\+H\+A\+R\+\_\+\+M\+AX}}~\mbox{\hyperlink{limits_8h_a8c13fdd8c2840edf0cb04a65297037bb}{S\+C\+H\+A\+R\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{limits_8h_a5d707bd32338557ced18c6ac76ca1b3a}{C\+H\+A\+R\+\_\+\+M\+IN}}~\mbox{\hyperlink{limits_8h_aa05d197000ad5c143ada0fcd9379b236}{S\+C\+H\+A\+R\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{limits_8h_a21658776274b3d146c674318b635a334}{I\+N\+T\+\_\+\+M\+IN}}~(-\/32767 -\/ 1)
+\item
+\#define \mbox{\hyperlink{limits_8h_a9ec306f36d50c7375e74f0d1c55a3a67}{I\+N\+T\+\_\+\+M\+AX}}~32767
+\item
+\#define \mbox{\hyperlink{limits_8h_a1f758438cb1c7bcf55da2431f5e319e6}{S\+H\+R\+T\+\_\+\+M\+AX}}~\mbox{\hyperlink{limits_8h_a9ec306f36d50c7375e74f0d1c55a3a67}{I\+N\+T\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{limits_8h_ae59de266aceffa1c258ac13f45fe0d18}{S\+H\+R\+T\+\_\+\+M\+IN}}~\mbox{\hyperlink{limits_8h_a21658776274b3d146c674318b635a334}{I\+N\+T\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{limits_8h_ac998ea02fbd821fc123d60445ce76f38}{U\+I\+N\+T\+\_\+\+M\+AX}}~0xffff
+\item
+\#define \mbox{\hyperlink{limits_8h_a4c5cca78586f61bea3640a1563a43819}{U\+I\+N\+T\+\_\+\+M\+IN}}~0
+\item
+\#define \mbox{\hyperlink{limits_8h_a689b119da994dece91d44b5aeac643ed}{U\+S\+H\+R\+T\+\_\+\+M\+AX}}~\mbox{\hyperlink{limits_8h_ac998ea02fbd821fc123d60445ce76f38}{U\+I\+N\+T\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{limits_8h_a57f617d9cf5cce12e8499f7512ebd948}{U\+S\+H\+R\+T\+\_\+\+M\+IN}}~\mbox{\hyperlink{limits_8h_a4c5cca78586f61bea3640a1563a43819}{U\+I\+N\+T\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{limits_8h_ae8a44c5a7436466221e0f3859d02420f}{L\+O\+N\+G\+\_\+\+M\+IN}}~(-\/2147483647L-\/1)
+\item
+\#define \mbox{\hyperlink{limits_8h_a50fece4db74f09568b2938db583c5655}{L\+O\+N\+G\+\_\+\+M\+AX}}~2147483647L
+\item
+\#define \mbox{\hyperlink{limits_8h_a41c51926a1997aab3503f9083935e06c}{U\+L\+O\+N\+G\+\_\+\+M\+AX}}~0xffffffff
+\item
+\#define \mbox{\hyperlink{limits_8h_a174a3b1d61499b676a2ad2efc8f224c5}{U\+L\+O\+N\+G\+\_\+\+M\+IN}}~0
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{limits_8h_a308d9dd2c0028ddb184b455bbd7865de}\label{limits_8h_a308d9dd2c0028ddb184b455bbd7865de}}
+\index{limits.h@{limits.h}!CHAR\_BIT@{CHAR\_BIT}}
+\index{CHAR\_BIT@{CHAR\_BIT}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{CHAR\_BIT}{CHAR\_BIT}}
+{\footnotesize\ttfamily \#define C\+H\+A\+R\+\_\+\+B\+IT~8 /$\ast$ bits in a char $\ast$/}
+
+\mbox{\Hypertarget{limits_8h_a8c13fdd8c2840edf0cb04a65297037bb}\label{limits_8h_a8c13fdd8c2840edf0cb04a65297037bb}}
+\index{limits.h@{limits.h}!SCHAR\_MAX@{SCHAR\_MAX}}
+\index{SCHAR\_MAX@{SCHAR\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{SCHAR\_MAX}{SCHAR\_MAX}}
+{\footnotesize\ttfamily \#define S\+C\+H\+A\+R\+\_\+\+M\+AX~127}
+
+\mbox{\Hypertarget{limits_8h_aa05d197000ad5c143ada0fcd9379b236}\label{limits_8h_aa05d197000ad5c143ada0fcd9379b236}}
+\index{limits.h@{limits.h}!SCHAR\_MIN@{SCHAR\_MIN}}
+\index{SCHAR\_MIN@{SCHAR\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{SCHAR\_MIN}{SCHAR\_MIN}}
+{\footnotesize\ttfamily \#define S\+C\+H\+A\+R\+\_\+\+M\+IN~-\/128}
+
+\mbox{\Hypertarget{limits_8h_a4066e640ee269d5d8f83ff6643b7af5f}\label{limits_8h_a4066e640ee269d5d8f83ff6643b7af5f}}
+\index{limits.h@{limits.h}!UCHAR\_MAX@{UCHAR\_MAX}}
+\index{UCHAR\_MAX@{UCHAR\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{UCHAR\_MAX}{UCHAR\_MAX}}
+{\footnotesize\ttfamily \#define U\+C\+H\+A\+R\+\_\+\+M\+AX~0xff}
+
+\mbox{\Hypertarget{limits_8h_a778eefd6535a9d4b752fca5dd0af58db}\label{limits_8h_a778eefd6535a9d4b752fca5dd0af58db}}
+\index{limits.h@{limits.h}!CHAR\_MAX@{CHAR\_MAX}}
+\index{CHAR\_MAX@{CHAR\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{CHAR\_MAX}{CHAR\_MAX}}
+{\footnotesize\ttfamily \#define C\+H\+A\+R\+\_\+\+M\+AX~\mbox{\hyperlink{limits_8h_a8c13fdd8c2840edf0cb04a65297037bb}{S\+C\+H\+A\+R\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{limits_8h_a5d707bd32338557ced18c6ac76ca1b3a}\label{limits_8h_a5d707bd32338557ced18c6ac76ca1b3a}}
+\index{limits.h@{limits.h}!CHAR\_MIN@{CHAR\_MIN}}
+\index{CHAR\_MIN@{CHAR\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{CHAR\_MIN}{CHAR\_MIN}}
+{\footnotesize\ttfamily \#define C\+H\+A\+R\+\_\+\+M\+IN~\mbox{\hyperlink{limits_8h_aa05d197000ad5c143ada0fcd9379b236}{S\+C\+H\+A\+R\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{limits_8h_a21658776274b3d146c674318b635a334}\label{limits_8h_a21658776274b3d146c674318b635a334}}
+\index{limits.h@{limits.h}!INT\_MIN@{INT\_MIN}}
+\index{INT\_MIN@{INT\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{INT\_MIN}{INT\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+M\+IN~(-\/32767 -\/ 1)}
+
+\mbox{\Hypertarget{limits_8h_a9ec306f36d50c7375e74f0d1c55a3a67}\label{limits_8h_a9ec306f36d50c7375e74f0d1c55a3a67}}
+\index{limits.h@{limits.h}!INT\_MAX@{INT\_MAX}}
+\index{INT\_MAX@{INT\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{INT\_MAX}{INT\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+M\+AX~32767}
+
+\mbox{\Hypertarget{limits_8h_a1f758438cb1c7bcf55da2431f5e319e6}\label{limits_8h_a1f758438cb1c7bcf55da2431f5e319e6}}
+\index{limits.h@{limits.h}!SHRT\_MAX@{SHRT\_MAX}}
+\index{SHRT\_MAX@{SHRT\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{SHRT\_MAX}{SHRT\_MAX}}
+{\footnotesize\ttfamily \#define S\+H\+R\+T\+\_\+\+M\+AX~\mbox{\hyperlink{limits_8h_a9ec306f36d50c7375e74f0d1c55a3a67}{I\+N\+T\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{limits_8h_ae59de266aceffa1c258ac13f45fe0d18}\label{limits_8h_ae59de266aceffa1c258ac13f45fe0d18}}
+\index{limits.h@{limits.h}!SHRT\_MIN@{SHRT\_MIN}}
+\index{SHRT\_MIN@{SHRT\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{SHRT\_MIN}{SHRT\_MIN}}
+{\footnotesize\ttfamily \#define S\+H\+R\+T\+\_\+\+M\+IN~\mbox{\hyperlink{limits_8h_a21658776274b3d146c674318b635a334}{I\+N\+T\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{limits_8h_ac998ea02fbd821fc123d60445ce76f38}\label{limits_8h_ac998ea02fbd821fc123d60445ce76f38}}
+\index{limits.h@{limits.h}!UINT\_MAX@{UINT\_MAX}}
+\index{UINT\_MAX@{UINT\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{UINT\_MAX}{UINT\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+M\+AX~0xffff}
+
+\mbox{\Hypertarget{limits_8h_a4c5cca78586f61bea3640a1563a43819}\label{limits_8h_a4c5cca78586f61bea3640a1563a43819}}
+\index{limits.h@{limits.h}!UINT\_MIN@{UINT\_MIN}}
+\index{UINT\_MIN@{UINT\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{UINT\_MIN}{UINT\_MIN}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+M\+IN~0}
+
+\mbox{\Hypertarget{limits_8h_a689b119da994dece91d44b5aeac643ed}\label{limits_8h_a689b119da994dece91d44b5aeac643ed}}
+\index{limits.h@{limits.h}!USHRT\_MAX@{USHRT\_MAX}}
+\index{USHRT\_MAX@{USHRT\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{USHRT\_MAX}{USHRT\_MAX}}
+{\footnotesize\ttfamily \#define U\+S\+H\+R\+T\+\_\+\+M\+AX~\mbox{\hyperlink{limits_8h_ac998ea02fbd821fc123d60445ce76f38}{U\+I\+N\+T\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{limits_8h_a57f617d9cf5cce12e8499f7512ebd948}\label{limits_8h_a57f617d9cf5cce12e8499f7512ebd948}}
+\index{limits.h@{limits.h}!USHRT\_MIN@{USHRT\_MIN}}
+\index{USHRT\_MIN@{USHRT\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{USHRT\_MIN}{USHRT\_MIN}}
+{\footnotesize\ttfamily \#define U\+S\+H\+R\+T\+\_\+\+M\+IN~\mbox{\hyperlink{limits_8h_a4c5cca78586f61bea3640a1563a43819}{U\+I\+N\+T\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{limits_8h_ae8a44c5a7436466221e0f3859d02420f}\label{limits_8h_ae8a44c5a7436466221e0f3859d02420f}}
+\index{limits.h@{limits.h}!LONG\_MIN@{LONG\_MIN}}
+\index{LONG\_MIN@{LONG\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{LONG\_MIN}{LONG\_MIN}}
+{\footnotesize\ttfamily \#define L\+O\+N\+G\+\_\+\+M\+IN~(-\/2147483647L-\/1)}
+
+\mbox{\Hypertarget{limits_8h_a50fece4db74f09568b2938db583c5655}\label{limits_8h_a50fece4db74f09568b2938db583c5655}}
+\index{limits.h@{limits.h}!LONG\_MAX@{LONG\_MAX}}
+\index{LONG\_MAX@{LONG\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{LONG\_MAX}{LONG\_MAX}}
+{\footnotesize\ttfamily \#define L\+O\+N\+G\+\_\+\+M\+AX~2147483647L}
+
+\mbox{\Hypertarget{limits_8h_a41c51926a1997aab3503f9083935e06c}\label{limits_8h_a41c51926a1997aab3503f9083935e06c}}
+\index{limits.h@{limits.h}!ULONG\_MAX@{ULONG\_MAX}}
+\index{ULONG\_MAX@{ULONG\_MAX}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{ULONG\_MAX}{ULONG\_MAX}}
+{\footnotesize\ttfamily \#define U\+L\+O\+N\+G\+\_\+\+M\+AX~0xffffffff}
+
+\mbox{\Hypertarget{limits_8h_a174a3b1d61499b676a2ad2efc8f224c5}\label{limits_8h_a174a3b1d61499b676a2ad2efc8f224c5}}
+\index{limits.h@{limits.h}!ULONG\_MIN@{ULONG\_MIN}}
+\index{ULONG\_MIN@{ULONG\_MIN}!limits.h@{limits.h}}
+\doxyparagraph{\texorpdfstring{ULONG\_MIN}{ULONG\_MIN}}
+{\footnotesize\ttfamily \#define U\+L\+O\+N\+G\+\_\+\+M\+IN~0}
+
diff --git a/docs/latex/longtable_doxygen.sty b/docs/latex/longtable_doxygen.sty
new file mode 100644
index 00000000..a0eb314f
--- /dev/null
+++ b/docs/latex/longtable_doxygen.sty
@@ -0,0 +1,448 @@
+%%
+%% This is file `longtable.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% longtable.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at http://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%% Copyright 1993-2016
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{longtable_doxygen}
+ [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen]
+\def\LT@err{\PackageError{longtable}}
+\def\LT@warn{\PackageWarning{longtable}}
+\def\LT@final@warn{%
+ \AtEndDocument{%
+ \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
+ \global\let\LT@final@warn\relax}
+\DeclareOption{errorshow}{%
+ \def\LT@warn{\PackageInfo{longtable}}}
+\DeclareOption{pausing}{%
+ \def\LT@warn#1{%
+ \LT@err{#1}{This is not really an error}}}
+\DeclareOption{set}{}
+\DeclareOption{final}{}
+\ProcessOptions
+\newskip\LTleft \LTleft=\fill
+\newskip\LTright \LTright=\fill
+\newskip\LTpre \LTpre=\bigskipamount
+\newskip\LTpost \LTpost=\bigskipamount
+\newcount\LTchunksize \LTchunksize=20
+\let\c@LTchunksize\LTchunksize
+\newdimen\LTcapwidth \LTcapwidth=4in
+\newbox\LT@head
+\newbox\LT@firsthead
+\newbox\LT@foot
+\newbox\LT@lastfoot
+\newcount\LT@cols
+\newcount\LT@rows
+\newcounter{LT@tables}
+\newcounter{LT@chunks}[LT@tables]
+\ifx\c@table\undefined
+ \newcounter{table}
+ \def\fnum@table{\tablename~\thetable}
+\fi
+\ifx\tablename\undefined
+ \def\tablename{Table}
+\fi
+\newtoks\LT@p@ftn
+\mathchardef\LT@end@pen=30000
+\def\longtable{%
+ \par
+ \ifx\multicols\@undefined
+ \else
+ \ifnum\col@number>\@ne
+ \@twocolumntrue
+ \fi
+ \fi
+ \if@twocolumn
+ \LT@err{longtable not in 1-column mode}\@ehc
+ \fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}}
+\def\LT@array[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}
+\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}}
+\def\LT@start{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
+ \output{\LT@output}}
+\def\endlongtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi}
+\def\LT@nofcols#1&{%
+ \futurelet\@let@token\LT@n@fcols}
+\def\LT@n@fcols{%
+ \advance\LT@cols\@ne
+ \ifx\@let@token\LT@nofcols
+ \expandafter\@gobble
+ \else
+ \expandafter\LT@nofcols
+ \fi}
+\def\LT@tabularcr{%
+ \relax\iffalse{\fi\ifnum0=`}\fi
+ \@ifstar
+ {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
+ \LT@t@bularcr}%
+ {\LT@t@bularcr}}
+\let\LT@crcr\crcr
+\let\LT@setprevdepth\relax
+\def\LT@t@bularcr{%
+ \global\advance\LT@rows\@ne
+ \ifnum\LT@rows=\LTchunksize
+ \gdef\LT@setprevdepth{%
+ \prevdepth\z@\global
+ \global\let\LT@setprevdepth\relax}%
+ \expandafter\LT@xtabularcr
+ \else
+ \ifnum0=`{}\fi
+ \expandafter\LT@LL@FM@cr
+ \fi}
+\def\LT@xtabularcr{%
+ \@ifnextchar[\LT@argtabularcr\LT@ntabularcr}
+\def\LT@ntabularcr{%
+ \ifnum0=`{}\fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@argtabularcr[#1]{%
+ \ifnum0=`{}\fi
+ \ifdim #1>\z@
+ \unskip\@xargarraycr{#1}%
+ \else
+ \@yargarraycr{#1}%
+ \fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@echunk{%
+ \crcr\LT@save@row\cr\egroup
+ \global\setbox\@ne\lastbox
+ \unskip
+ \egroup}
+\def\LT@entry#1#2{%
+ \ifhmode\@firstofone{&}\fi\omit
+ \ifnum#1=\c@LT@chunks
+ \else
+ \kern#2\relax
+ \fi}
+\def\LT@entry@chop#1#2{%
+ \noexpand\LT@entry
+ {\ifnum#1>\c@LT@chunks
+ 1}{0pt%
+ \else
+ #1}{#2%
+ \fi}}
+\def\LT@entry@write{%
+ \noexpand\LT@entry^^J%
+ \@spaces}
+\def\LT@kill{%
+ \LT@echunk
+ \LT@get@widths
+ \expandafter\LT@rebox\LT@bchunk}
+\def\LT@rebox#1\bgroup{%
+ #1\bgroup
+ \unvbox\z@
+ \unskip
+ \setbox\z@\lastbox}
+\def\LT@blank@row{%
+ \xdef\LT@save@row{\expandafter\LT@build@blank
+ \romannumeral\number\LT@cols 001 }}
+\def\LT@build@blank#1{%
+ \if#1m%
+ \noexpand\LT@entry{1}{0pt}%
+ \expandafter\LT@build@blank
+ \fi}
+\def\LT@make@row{%
+ \global\expandafter\let\expandafter\LT@save@row
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ \ifx\LT@save@row\relax
+ \LT@blank@row
+ \else
+ {\let\LT@entry\or
+ \if!%
+ \ifcase\expandafter\expandafter\expandafter\LT@cols
+ \expandafter\@gobble\LT@save@row
+ \or
+ \else
+ \relax
+ \fi
+ !%
+ \else
+ \aftergroup\LT@blank@row
+ \fi}%
+ \fi}
+\let\setlongtables\relax
+\def\LT@get@widths{%
+ \setbox\tw@\hbox{%
+ \unhbox\@ne
+ \let\LT@old@row\LT@save@row
+ \global\let\LT@save@row\@empty
+ \count@\LT@cols
+ \loop
+ \unskip
+ \setbox\tw@\lastbox
+ \ifhbox\tw@
+ \LT@def@row
+ \advance\count@\m@ne
+ \repeat}%
+ \ifx\LT@@save@row\@undefined
+ \let\LT@@save@row\LT@save@row
+ \fi}
+\def\LT@def@row{%
+ \let\LT@entry\or
+ \edef\@tempa{%
+ \ifcase\expandafter\count@\LT@old@row
+ \else
+ {1}{0pt}%
+ \fi}%
+ \let\LT@entry\relax
+ \xdef\LT@save@row{%
+ \LT@entry
+ \expandafter\LT@max@sel\@tempa
+ \LT@save@row}}
+\def\LT@max@sel#1#2{%
+ {\ifdim#2=\wd\tw@
+ #1%
+ \else
+ \number\c@LT@chunks
+ \fi}%
+ {\the\wd\tw@}}
+\def\LT@hline{%
+ \noalign{\ifnum0=`}\fi
+ \penalty\@M
+ \futurelet\@let@token\LT@@hline}
+\def\LT@@hline{%
+ \ifx\@let@token\hline
+ \global\let\@gtempa\@gobble
+ \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
+ \else
+ \global\let\@gtempa\@empty
+ \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\LT@sep}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\penalty\@M}%
+ \@gtempa}
+\def\LT@caption{%
+ \noalign\bgroup
+ \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n}
+\def\LT@c@ption#1[#2]#3{%
+ \LT@makecaption#1\fnum@table{#3}%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\else
+ {\let\\\space
+ \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
+ \fi}
+\def\LT@capti@n{%
+ \@ifstar
+ {\egroup\LT@c@ption\@gobble[]}%
+ {\egroup\@xdblarg{\LT@c@ption\@firstofone}}}
+\def\LT@makecaption#1#2#3{%
+ \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+ \sbox\@tempboxa{#1{#2: }#3}%
+ \ifdim\wd\@tempboxa>\hsize
+ #1{#2: }#3%
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \endgraf\vskip\baselineskip}%
+ \hss}}}
+\def\LT@output{%
+ \ifnum\outputpenalty <-\@Mi
+ \ifnum\outputpenalty > -\LT@end@pen
+ \LT@err{floats and marginpars not allowed in a longtable}\@ehc
+ \else
+ \setbox\z@\vbox{\unvbox\@cclv}%
+ \ifdim \ht\LT@lastfoot>\ht\LT@foot
+ \dimen@\pagegoal
+ \advance\dimen@-\ht\LT@lastfoot
+ \ifdim\dimen@<\ht\z@
+ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \setbox\z@\vbox{\box\LT@head}%
+ \fi
+ \fi
+ \global\@colroom\@colht
+ \global\vsize\@colht
+ \vbox
+ {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
+ \fi
+ \else
+ \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \global\vsize\@colroom
+ \copy\LT@head\nobreak
+ \fi}
+\def\LT@end@hd@ft#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err
+ {Longtable head or foot not at start of table}%
+ {Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
+\def\endhead{\LT@end@hd@ft\LT@head}
+\def\endfoot{\LT@end@hd@ft\LT@foot}
+\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
+\def\LT@startpbox#1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@}
+\def\LT@endpbox{%
+ \@finalstrut\@arstrutbox
+ \egroup
+ \the\LT@p@ftn
+ \global\LT@p@ftn{}%
+ \hfil}
+\def\LT@p@ftntext#1{%
+ \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
+ \global\LT@p@ftn\expandafter{\@tempa{#1}}}%
+
+\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen}
+\endinput
+%%
+%% End of file `longtable.sty'.
diff --git a/docs/latex/modules.tex b/docs/latex/modules.tex
new file mode 100644
index 00000000..c3b11014
--- /dev/null
+++ b/docs/latex/modules.tex
@@ -0,0 +1,4 @@
+\doxysubsection{C modules}
+Here is a list of all modules\+:\begin{DoxyCompactList}
+\item \contentsline{section}{List of gbdk fonts}{\pageref{group__gbdk__fonts}}{}
+\end{DoxyCompactList}
diff --git a/docs/latex/platform_8h.tex b/docs/latex/platform_8h.tex
new file mode 100644
index 00000000..a07fa34c
--- /dev/null
+++ b/docs/latex/platform_8h.tex
@@ -0,0 +1,5 @@
+\hypertarget{platform_8h}{}\doxysubsection{gbdk/platform.h File Reference}
+\label{platform_8h}\index{gbdk/platform.h@{gbdk/platform.h}}
+{\ttfamily \#include $<$gb/gb.\+h$>$}\newline
+{\ttfamily \#include $<$gb/cgb.\+h$>$}\newline
+{\ttfamily \#include $<$gb/sgb.\+h$>$}\newline
diff --git a/docs/latex/rand_8h.tex b/docs/latex/rand_8h.tex
new file mode 100644
index 00000000..dbd67dd7
--- /dev/null
+++ b/docs/latex/rand_8h.tex
@@ -0,0 +1,139 @@
+\hypertarget{rand_8h}{}\doxysubsection{rand.\+h File Reference}
+\label{rand_8h}\index{rand.h@{rand.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{rand_8h_a690f251553b39fd4f31894826141b61a}{R\+A\+N\+D\+\_\+\+M\+AX}}~255
+\item
+\#define \mbox{\hyperlink{rand_8h_a6dbd2f1a15221db40f456cf574a793b4}{R\+A\+N\+D\+W\+\_\+\+M\+AX}}~65535
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{rand_8h_a964538799843c0ba5bd01151ef7e2640}{initrand}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} seed) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{rand_8h_ac659150eb39aae2f523bef6554b19b77}{randw}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{rand_8h_a333400f85febd7e1360835955103db8b}{initarand}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} seed) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{rand_8h_a67415330a1c7984e4537dac753306804}{arand}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{rand_8h_a7aab2f4a234108a5eae48e0d26380ae7}{\+\_\+\+\_\+rand\+\_\+seed}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Random generator using the linear congruential method
+
+\begin{DoxyAuthor}{Author}
+Luc Van den Borre
+\end{DoxyAuthor}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{rand_8h_a690f251553b39fd4f31894826141b61a}\label{rand_8h_a690f251553b39fd4f31894826141b61a}}
+\index{rand.h@{rand.h}!RAND\_MAX@{RAND\_MAX}}
+\index{RAND\_MAX@{RAND\_MAX}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{RAND\_MAX}{RAND\_MAX}}
+{\footnotesize\ttfamily \#define R\+A\+N\+D\+\_\+\+M\+AX~255}
+
+\mbox{\Hypertarget{rand_8h_a6dbd2f1a15221db40f456cf574a793b4}\label{rand_8h_a6dbd2f1a15221db40f456cf574a793b4}}
+\index{rand.h@{rand.h}!RANDW\_MAX@{RANDW\_MAX}}
+\index{RANDW\_MAX@{RANDW\_MAX}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{RANDW\_MAX}{RANDW\_MAX}}
+{\footnotesize\ttfamily \#define R\+A\+N\+D\+W\+\_\+\+M\+AX~65535}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{rand_8h_a964538799843c0ba5bd01151ef7e2640}\label{rand_8h_a964538799843c0ba5bd01151ef7e2640}}
+\index{rand.h@{rand.h}!initrand@{initrand}}
+\index{initrand@{initrand}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{initrand()}{initrand()}}
+{\footnotesize\ttfamily void initrand (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{seed }\end{DoxyParamCaption})}
+
+Initalise the pseudo-\/random number generator.
+
+
+\begin{DoxyParams}{Parameters}
+{\em seed} & The value for initializing the random number generator.\\
+\hline
+\end{DoxyParams}
+The seed should be different each time, otherwise the same pseudo-\/random sequence will be generated.
+
+The D\+IV Register (\mbox{\hyperlink{gb_2hardware_8h_afa1e18e47bf68ce68d7807fff6edf16b}{D\+I\+V\+\_\+\+R\+EG}}) is sometimes used as a seed, particularly if read at some variable point in time (such as when the player presses a button).
+
+Only needs to be called once to initialize, but may be called again to re-\/initialize with the same or a different seed.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand()}}, \mbox{\hyperlink{rand_8h_ac659150eb39aae2f523bef6554b19b77}{randw()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}\label{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}}
+\index{rand.h@{rand.h}!rand@{rand}}
+\index{rand@{rand}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{rand()}{rand()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} rand (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns a random byte (8 bit) value.
+
+\mbox{\hyperlink{rand_8h_a964538799843c0ba5bd01151ef7e2640}{initrand()}} should be used to initialize the random number generator before using \mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand()}} \mbox{\Hypertarget{rand_8h_ac659150eb39aae2f523bef6554b19b77}\label{rand_8h_ac659150eb39aae2f523bef6554b19b77}}
+\index{rand.h@{rand.h}!randw@{randw}}
+\index{randw@{randw}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{randw()}{randw()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} randw (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns a random word (16 bit) value.
+
+\mbox{\hyperlink{rand_8h_a964538799843c0ba5bd01151ef7e2640}{initrand()}} should be used to initialize the random number generator before using \mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand()}} \mbox{\Hypertarget{rand_8h_a333400f85febd7e1360835955103db8b}\label{rand_8h_a333400f85febd7e1360835955103db8b}}
+\index{rand.h@{rand.h}!initarand@{initarand}}
+\index{initarand@{initarand}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{initarand()}{initarand()}}
+{\footnotesize\ttfamily void initarand (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{seed }\end{DoxyParamCaption})}
+
+Random generator using the linear lagged additive method
+
+
+\begin{DoxyParams}{Parameters}
+{\em seed} & The value for initializing the random number generator.\\
+\hline
+\end{DoxyParams}
+Note\+: \mbox{\hyperlink{rand_8h_a333400f85febd7e1360835955103db8b}{initarand()}} calls \mbox{\hyperlink{rand_8h_a964538799843c0ba5bd01151ef7e2640}{initrand()}} with the same seed value, and uses \mbox{\hyperlink{rand_8h_a21e0cee33278952c044f27d02c0b0d1a}{rand()}} to initialize the random generator.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{rand_8h_a964538799843c0ba5bd01151ef7e2640}{initrand()}} for suggestions about seed values, \mbox{\hyperlink{rand_8h_a67415330a1c7984e4537dac753306804}{arand()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{rand_8h_a67415330a1c7984e4537dac753306804}\label{rand_8h_a67415330a1c7984e4537dac753306804}}
+\index{rand.h@{rand.h}!arand@{arand}}
+\index{arand@{arand}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{arand()}{arand()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} arand (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns a random number generated with the linear lagged additive method.
+
+\mbox{\hyperlink{rand_8h_a333400f85febd7e1360835955103db8b}{initarand()}} should be used to initialize the random number generator before using \mbox{\hyperlink{rand_8h_a67415330a1c7984e4537dac753306804}{arand()}}
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{rand_8h_a7aab2f4a234108a5eae48e0d26380ae7}\label{rand_8h_a7aab2f4a234108a5eae48e0d26380ae7}}
+\index{rand.h@{rand.h}!\_\_rand\_seed@{\_\_rand\_seed}}
+\index{\_\_rand\_seed@{\_\_rand\_seed}!rand.h@{rand.h}}
+\doxyparagraph{\texorpdfstring{\_\_rand\_seed}{\_\_rand\_seed}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \+\_\+\+\_\+rand\+\_\+seed\hspace{0.3cm}{\ttfamily [extern]}}
+
+The random number seed is stored in \+\_\+\+\_\+rand\+\_\+seed and can be saved and restored if needed.
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{comment}{// Save}}
+\DoxyCodeLine{some\_uint16 = \mbox{\hyperlink{rand_8h_a7aab2f4a234108a5eae48e0d26380ae7}{\_\_rand\_seed}};}
+\DoxyCodeLine{...}
+\DoxyCodeLine{\textcolor{comment}{// Restore}}
+\DoxyCodeLine{\_\_rand\_seed = some\_uint16;}
+\end{DoxyCode}
+
\ No newline at end of file
diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex
new file mode 100644
index 00000000..ef01a63b
--- /dev/null
+++ b/docs/latex/refman.tex
@@ -0,0 +1,319 @@
+\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{article}
+
+%% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
+\usepackage{ifthen}
+\ifx\requestedLaTeXdate\undefined
+\usepackage{array}
+\else
+\usepackage{array}[=2016-10-06]
+\fi
+%%
+% Packages required by doxygen
+\usepackage{fixltx2e}
+\usepackage{calc}
+\usepackage{doxygen}
+\usepackage{graphicx}
+\usepackage[utf8]{inputenc}
+\usepackage{makeidx}
+\usepackage{multicol}
+\usepackage{multirow}
+\PassOptionsToPackage{warn}{textcomp}
+\usepackage{textcomp}
+\usepackage[nointegrals]{wasysym}
+\usepackage[table]{xcolor}
+\usepackage{ifpdf,ifxetex}
+
+% Font selection
+\usepackage[T1]{fontenc}
+\usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\renewcommand{\familydefault}{\sfdefault}
+\usepackage{amssymb}
+\usepackage{sectsty}
+\allsectionsfont{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+}
+\renewcommand{\DoxyLabelFont}{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+}
+\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
+
+% Arguments of doxygenemoji:
+% 1) '::' form of the emoji, already "LaTeX"-escaped
+% 2) file with the name of the emoji without the .png extension
+% in case image exist use this otherwise use the '::' form
+\newcommand{\doxygenemoji}[2]{%
+ \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
+}
+% Page & text layout
+\usepackage{geometry}
+\geometry{%
+ a4paper,%
+ top=2.5cm,%
+ bottom=2.5cm,%
+ left=2.5cm,%
+ right=2.5cm%
+}
+\tolerance=750
+\hfuzz=15pt
+\hbadness=750
+\setlength{\emergencystretch}{15pt}
+\setlength{\parindent}{0cm}
+\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
+\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
+\doxynormalparskip
+\makeatletter
+\renewcommand{\paragraph}{%
+ \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@parafont%
+ }%
+}
+\renewcommand{\subparagraph}{%
+ \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@subparafont%
+ }%
+}
+\makeatother
+
+\makeatletter
+\newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
+\makeatother
+
+% Headers & footers
+\usepackage{fancyhdr}
+\pagestyle{fancyplain}
+\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
+\fancyhead[CE]{\fancyplain{}{}}
+\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
+\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
+\fancyhead[CO]{\fancyplain{}{}}
+\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
+\fancyfoot[LE]{\fancyplain{}{}}
+\fancyfoot[CE]{\fancyplain{}{}}
+\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Feb 1 2022 16\+:29\+:08 for G\+B\+D\+K 2020 Docs by Doxygen }}
+\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Feb 1 2022 16\+:29\+:08 for G\+B\+D\+K 2020 Docs by Doxygen }}
+\fancyfoot[CO]{\fancyplain{}{}}
+\fancyfoot[RO]{\fancyplain{}{}}
+\renewcommand{\footrulewidth}{0.4pt}
+\renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+}
+
+% Indices & bibliography
+\usepackage{natbib}
+\usepackage[titles]{tocloft}
+\setcounter{tocdepth}{3}
+\setcounter{secnumdepth}{5}
+\makeindex
+
+\usepackage{newunicodechar}
+ \newunicodechar{⁻}{${}^{-}$}% Superscript minus
+ \newunicodechar{²}{${}^{2}$}% Superscript two
+ \newunicodechar{³}{${}^{3}$}% Superscript three
+
+% Hyperlinks (required, but should be loaded last)
+\ifpdf
+ \usepackage[pdftex,pagebackref=true]{hyperref}
+\else
+ \ifxetex
+ \usepackage[pagebackref=true]{hyperref}
+ \else
+ \usepackage[ps2pdf,pagebackref=true]{hyperref}
+ \fi
+\fi
+
+\hypersetup{%
+ colorlinks=true,%
+ linkcolor=blue,%
+ citecolor=blue,%
+ unicode%
+}
+
+% Custom commands
+\newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+}
+
+\usepackage{caption}
+\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
+
+\usepackage{etoc}
+\etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
+\renewcommand{\numberline}[1]{#1~}
+%===== C O N T E N T S =====
+
+\begin{document}
+
+% Titlepage & ToC
+\hypersetup{pageanchor=false,
+ bookmarksnumbered=true,
+ pdfencoding=unicode
+ }
+\pagenumbering{alph}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}%
+{\Large G\+B\+DK 2020 Docs \\[1ex]\large 4.\+0.\+6 }\\
+\vspace*{1cm}
+{\large Generated by Doxygen 1.8.20}\\
+\vspace*{0.5cm}
+{\small Tue Feb 1 2022 16:29:08}\\
+\end{center}
+\end{titlepage}
+\pagenumbering{roman}
+\tableofcontents
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true}
+
+%--- Begin generated contents ---
+\doxysection{General Documentation}
+\label{index}\hypertarget{index}{}\input{index}
+\doxysection{Getting Started}
+\label{docs_getting_started}
+\Hypertarget{docs_getting_started}
+\input{docs_getting_started}
+\doxysection{Links and Third-\/\+Party Tools}
+\label{docs_links_and_tools}
+\Hypertarget{docs_links_and_tools}
+\input{docs_links_and_tools}
+\doxysection{Using G\+B\+DK}
+\label{docs_using_gbdk}
+\Hypertarget{docs_using_gbdk}
+\input{docs_using_gbdk}
+\doxysection{Coding Guidelines}
+\label{docs_coding_guidelines}
+\Hypertarget{docs_coding_guidelines}
+\input{docs_coding_guidelines}
+\doxysection{R\+O\+M/\+R\+AM Banking and M\+B\+Cs}
+\label{docs_rombanking_mbcs}
+\Hypertarget{docs_rombanking_mbcs}
+\input{docs_rombanking_mbcs}
+\doxysection{G\+B\+DK Toolchain}
+\label{docs_toolchain}
+\Hypertarget{docs_toolchain}
+\input{docs_toolchain}
+\doxysection{Supported Consoles \& Cross Compiling}
+\label{docs_supported_consoles}
+\Hypertarget{docs_supported_consoles}
+\input{docs_supported_consoles}
+\doxysection{Example Programs}
+\label{docs_example_programs}
+\Hypertarget{docs_example_programs}
+\input{docs_example_programs}
+\doxysection{Frequently Asked Questions (F\+AQ)}
+\label{docs_faq}
+\Hypertarget{docs_faq}
+\input{docs_faq}
+\doxysection{Migrating to new G\+B\+DK Versions}
+\label{docs_migrating_versions}
+\Hypertarget{docs_migrating_versions}
+\input{docs_migrating_versions}
+\doxysection{G\+B\+DK Releases}
+\label{docs_releases}
+\Hypertarget{docs_releases}
+\input{docs_releases}
+\doxysection{Toolchain settings}
+\label{docs_toolchain_settings}
+\Hypertarget{docs_toolchain_settings}
+\input{docs_toolchain_settings}
+\doxysection{Todo List}
+\label{todo}
+\Hypertarget{todo}
+\input{todo}
+\doxysection{Module Index}
+\input{modules}
+\doxysection{Data Structure Index}
+\input{annotated}
+\doxysection{File Index}
+\input{files}
+\doxysection{Module Documentation}
+\input{group__gbdk__fonts}
+\doxysection{Data Structure Documentation}
+\input{union____far__ptr}
+\input{union__fixed}
+\input{structatomic__flag}
+\input{structisr__nested__vector__t}
+\input{structisr__vector__t}
+\input{structjoypads__t}
+\input{structmetasprite__t}
+\input{struct_o_a_m__item__t}
+\input{structsfont__handle}
+\doxysection{File Documentation}
+\input{01__getting__started_8md}
+\input{02__links__and__tools_8md}
+\input{03__using__gbdk_8md}
+\input{04__coding__guidelines_8md}
+\input{05__banking__mbcs_8md}
+\input{06__toolchain_8md}
+\input{06b__supported__consoles_8md}
+\input{07__sample__programs_8md}
+\input{08__faq_8md}
+\input{09__migrating__new__versions_8md}
+\input{10__release__notes_8md}
+\input{20__toolchain__settings_8md}
+\input{docs__index_8md}
+\input{gbz80_2provides_8h}
+\input{z80_2provides_8h}
+\input{asm_2gbz80_2stdarg_8h}
+\input{asm_2z80_2stdarg_8h}
+\input{stdarg_8h}
+\input{asm_2gbz80_2string_8h}
+\input{asm_2z80_2string_8h}
+\input{string_8h}
+\input{asm_2gbz80_2types_8h}
+\input{asm_2types_8h}
+\input{asm_2z80_2types_8h}
+\input{types_8h}
+\input{assert_8h}
+\input{ctype_8h}
+\input{bcd_8h}
+\input{k_2bcd_8h}
+\input{bgb__emu_8h}
+\input{cgb_8h}
+\input{crash__handler_8h}
+\input{drawing_8h}
+\input{emu__debug_8h}
+\input{gb_8h}
+\input{gb_2gbdecompress_8h}
+\input{gbdk_2gbdecompress_8h}
+\input{sms_2gbdecompress_8h}
+\input{gb_2hardware_8h}
+\input{sms_2hardware_8h}
+\input{isr_8h}
+\input{gb_2metasprites_8h}
+\input{gbdk_2metasprites_8h}
+\input{sms_2metasprites_8h}
+\input{sgb_8h}
+\input{console_8h}
+\input{far__ptr_8h}
+\input{font_8h}
+\input{gbdk-lib_8h}
+\input{incbin_8h}
+\input{platform_8h}
+\input{rledecompress_8h}
+\input{version_8h}
+\input{limits_8h}
+\input{rand_8h}
+\input{setjmp_8h}
+\input{sms_8h}
+\input{stdatomic_8h}
+\input{stdbool_8h}
+\input{stddef_8h}
+\input{stdint_8h}
+\input{stdio_8h}
+\input{stdlib_8h}
+\input{stdnoreturn_8h}
+\input{time_8h}
+\input{typeof_8h}
+%--- End generated contents ---
+
+% Index
+\newpage
+\phantomsection
+\clearemptydoublepage
+\addcontentsline{toc}{section}{\indexname}
+\printindex
+
+\end{document}
diff --git a/docs/latex/rledecompress_8h.tex b/docs/latex/rledecompress_8h.tex
new file mode 100644
index 00000000..44076c7f
--- /dev/null
+++ b/docs/latex/rledecompress_8h.tex
@@ -0,0 +1,71 @@
+\hypertarget{rledecompress_8h}{}\doxysubsection{gbdk/rledecompress.h File Reference}
+\label{rledecompress_8h}\index{gbdk/rledecompress.h@{gbdk/rledecompress.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{rledecompress_8h_a2b4967f6970ecd99478db3807c68d955}{R\+L\+E\+\_\+\+S\+T\+OP}}~0
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}{rle\+\_\+init}} (void $\ast$data) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}{rle\+\_\+decompress}} (void $\ast$dest, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} len) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Decompressor for R\+LE encoded data
+
+Decompresses data which has been compressed with \mbox{\hyperlink{docs_toolchain_utility_gbcompress}{gbcompress}} using the {\ttfamily -\/-\/alg=rle} argument.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{rledecompress_8h_a2b4967f6970ecd99478db3807c68d955}\label{rledecompress_8h_a2b4967f6970ecd99478db3807c68d955}}
+\index{rledecompress.h@{rledecompress.h}!RLE\_STOP@{RLE\_STOP}}
+\index{RLE\_STOP@{RLE\_STOP}!rledecompress.h@{rledecompress.h}}
+\doxyparagraph{\texorpdfstring{RLE\_STOP}{RLE\_STOP}}
+{\footnotesize\ttfamily \#define R\+L\+E\+\_\+\+S\+T\+OP~0}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}\label{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}}
+\index{rledecompress.h@{rledecompress.h}!rle\_init@{rle\_init}}
+\index{rle\_init@{rle\_init}!rledecompress.h@{rledecompress.h}}
+\doxyparagraph{\texorpdfstring{rle\_init()}{rle\_init()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} rle\+\_\+init (\begin{DoxyParamCaption}\item[{void $\ast$}]{data }\end{DoxyParamCaption})}
+
+Initialize the R\+LE decompressor with R\+LE data at address {\bfseries{data}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em data} & Pointer to start of R\+LE compressed data\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}{rle\+\_\+decompress}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}\label{rledecompress_8h_ad60bf95ddad142d8d81e5e1f0a0bb6e0}}
+\index{rledecompress.h@{rledecompress.h}!rle\_decompress@{rle\_decompress}}
+\index{rle\_decompress@{rle\_decompress}!rledecompress.h@{rledecompress.h}}
+\doxyparagraph{\texorpdfstring{rle\_decompress()}{rle\_decompress()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} rle\+\_\+decompress (\begin{DoxyParamCaption}\item[{void $\ast$}]{dest, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{len }\end{DoxyParamCaption})}
+
+Decompress R\+LE compressed data into {\bfseries{dest}} for length {\bfseries{len}} bytes
+
+
+\begin{DoxyParams}{Parameters}
+{\em dest} & Pointer to destination buffer/address \\
+\hline
+{\em len} & number of bytes to decompress\\
+\hline
+\end{DoxyParams}
+Before calling this function \mbox{\hyperlink{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}{rle\+\_\+init}} must be called one time to initialize the R\+LE decompressor.
+
+Decompresses data which has been compressed with \mbox{\hyperlink{docs_toolchain_utility_gbcompress}{gbcompress}} using the {\ttfamily -\/-\/alg=rle} argument.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{rledecompress_8h_a95560a74a89bab26cb6265dcc2bf54f6}{rle\+\_\+init}}
+\end{DoxySeeAlso}
diff --git a/docs/latex/setjmp_8h.tex b/docs/latex/setjmp_8h.tex
new file mode 100644
index 00000000..683fbebd
--- /dev/null
+++ b/docs/latex/setjmp_8h.tex
@@ -0,0 +1,92 @@
+\hypertarget{setjmp_8h}{}\doxysubsection{setjmp.\+h File Reference}
+\label{setjmp_8h}\index{setjmp.h@{setjmp.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{setjmp_8h_aebec2c4d6fc67c86fbb297bd79efb27c}{S\+P\+\_\+\+S\+I\+ZE}}~1
+\item
+\#define \mbox{\hyperlink{setjmp_8h_ae02ec77c070126e75761ab85226b62a7}{B\+P\+\_\+\+S\+I\+ZE}}~0
+\item
+\#define \mbox{\hyperlink{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}{S\+P\+X\+\_\+\+S\+I\+ZE}}~0
+\item
+\#define \mbox{\hyperlink{setjmp_8h_a0239bfe1e2b75fa5757c32a90d0c140d}{B\+P\+X\+\_\+\+S\+I\+ZE}}~\mbox{\hyperlink{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}{S\+P\+X\+\_\+\+S\+I\+ZE}}
+\item
+\#define \mbox{\hyperlink{setjmp_8h_a61c5519ad23b4ddbcc77c45352aac913}{R\+E\+T\+\_\+\+S\+I\+ZE}}~2
+\item
+\#define \mbox{\hyperlink{setjmp_8h_a27d1a255c7e0d69afec2367bb85b60b0}{setjmp}}(jump\+\_\+buf)~\mbox{\hyperlink{setjmp_8h_af04f5d4b814aaac060bca4e9dea7c2a1}{\+\_\+\+\_\+setjmp}}(jump\+\_\+buf)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef unsigned char \mbox{\hyperlink{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}{jmp\+\_\+buf}}\mbox{[}\mbox{\hyperlink{setjmp_8h_a61c5519ad23b4ddbcc77c45352aac913}{R\+E\+T\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_aebec2c4d6fc67c86fbb297bd79efb27c}{S\+P\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_ae02ec77c070126e75761ab85226b62a7}{B\+P\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}{S\+P\+X\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_a0239bfe1e2b75fa5757c32a90d0c140d}{B\+P\+X\+\_\+\+S\+I\+ZE}}\mbox{]}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{setjmp_8h_af04f5d4b814aaac060bca4e9dea7c2a1}{\+\_\+\+\_\+setjmp}} (\mbox{\hyperlink{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}{jmp\+\_\+buf}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\+\_\+\+Noreturn void \mbox{\hyperlink{setjmp_8h_ae8f437ea759f560a09affd1bab9acb74}{longjmp}} (\mbox{\hyperlink{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}{jmp\+\_\+buf}}, int) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{setjmp_8h_aebec2c4d6fc67c86fbb297bd79efb27c}\label{setjmp_8h_aebec2c4d6fc67c86fbb297bd79efb27c}}
+\index{setjmp.h@{setjmp.h}!SP\_SIZE@{SP\_SIZE}}
+\index{SP\_SIZE@{SP\_SIZE}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{SP\_SIZE}{SP\_SIZE}}
+{\footnotesize\ttfamily \#define S\+P\+\_\+\+S\+I\+ZE~1}
+
+\mbox{\Hypertarget{setjmp_8h_ae02ec77c070126e75761ab85226b62a7}\label{setjmp_8h_ae02ec77c070126e75761ab85226b62a7}}
+\index{setjmp.h@{setjmp.h}!BP\_SIZE@{BP\_SIZE}}
+\index{BP\_SIZE@{BP\_SIZE}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{BP\_SIZE}{BP\_SIZE}}
+{\footnotesize\ttfamily \#define B\+P\+\_\+\+S\+I\+ZE~0}
+
+\mbox{\Hypertarget{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}\label{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}}
+\index{setjmp.h@{setjmp.h}!SPX\_SIZE@{SPX\_SIZE}}
+\index{SPX\_SIZE@{SPX\_SIZE}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{SPX\_SIZE}{SPX\_SIZE}}
+{\footnotesize\ttfamily \#define S\+P\+X\+\_\+\+S\+I\+ZE~0}
+
+\mbox{\Hypertarget{setjmp_8h_a0239bfe1e2b75fa5757c32a90d0c140d}\label{setjmp_8h_a0239bfe1e2b75fa5757c32a90d0c140d}}
+\index{setjmp.h@{setjmp.h}!BPX\_SIZE@{BPX\_SIZE}}
+\index{BPX\_SIZE@{BPX\_SIZE}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{BPX\_SIZE}{BPX\_SIZE}}
+{\footnotesize\ttfamily \#define B\+P\+X\+\_\+\+S\+I\+ZE~\mbox{\hyperlink{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}{S\+P\+X\+\_\+\+S\+I\+ZE}}}
+
+\mbox{\Hypertarget{setjmp_8h_a61c5519ad23b4ddbcc77c45352aac913}\label{setjmp_8h_a61c5519ad23b4ddbcc77c45352aac913}}
+\index{setjmp.h@{setjmp.h}!RET\_SIZE@{RET\_SIZE}}
+\index{RET\_SIZE@{RET\_SIZE}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{RET\_SIZE}{RET\_SIZE}}
+{\footnotesize\ttfamily \#define R\+E\+T\+\_\+\+S\+I\+ZE~2}
+
+\mbox{\Hypertarget{setjmp_8h_a27d1a255c7e0d69afec2367bb85b60b0}\label{setjmp_8h_a27d1a255c7e0d69afec2367bb85b60b0}}
+\index{setjmp.h@{setjmp.h}!setjmp@{setjmp}}
+\index{setjmp@{setjmp}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{setjmp}{setjmp}}
+{\footnotesize\ttfamily \#define setjmp(\begin{DoxyParamCaption}\item[{}]{jump\+\_\+buf }\end{DoxyParamCaption})~\mbox{\hyperlink{setjmp_8h_af04f5d4b814aaac060bca4e9dea7c2a1}{\+\_\+\+\_\+setjmp}}(jump\+\_\+buf)}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}\label{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}}
+\index{setjmp.h@{setjmp.h}!jmp\_buf@{jmp\_buf}}
+\index{jmp\_buf@{jmp\_buf}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{jmp\_buf}{jmp\_buf}}
+{\footnotesize\ttfamily typedef unsigned char jmp\+\_\+buf\mbox{[}\mbox{\hyperlink{setjmp_8h_a61c5519ad23b4ddbcc77c45352aac913}{R\+E\+T\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_aebec2c4d6fc67c86fbb297bd79efb27c}{S\+P\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_ae02ec77c070126e75761ab85226b62a7}{B\+P\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_ad27470e8d39238686f96b46d5b9deb40}{S\+P\+X\+\_\+\+S\+I\+ZE}}+\mbox{\hyperlink{setjmp_8h_a0239bfe1e2b75fa5757c32a90d0c140d}{B\+P\+X\+\_\+\+S\+I\+ZE}}\mbox{]}}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{setjmp_8h_af04f5d4b814aaac060bca4e9dea7c2a1}\label{setjmp_8h_af04f5d4b814aaac060bca4e9dea7c2a1}}
+\index{setjmp.h@{setjmp.h}!\_\_setjmp@{\_\_setjmp}}
+\index{\_\_setjmp@{\_\_setjmp}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{\_\_setjmp()}{\_\_setjmp()}}
+{\footnotesize\ttfamily int \+\_\+\+\_\+setjmp (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}{jmp\+\_\+buf}}}]{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{setjmp_8h_ae8f437ea759f560a09affd1bab9acb74}\label{setjmp_8h_ae8f437ea759f560a09affd1bab9acb74}}
+\index{setjmp.h@{setjmp.h}!longjmp@{longjmp}}
+\index{longjmp@{longjmp}!setjmp.h@{setjmp.h}}
+\doxyparagraph{\texorpdfstring{longjmp()}{longjmp()}}
+{\footnotesize\ttfamily \+\_\+\+Noreturn void longjmp (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{setjmp_8h_a88bdd5a73c39b334f254a3ef5488880d}{jmp\+\_\+buf}}}]{, }\item[{int}]{ }\end{DoxyParamCaption})}
+
diff --git a/docs/latex/sgb_8h.tex b/docs/latex/sgb_8h.tex
new file mode 100644
index 00000000..e4227e88
--- /dev/null
+++ b/docs/latex/sgb_8h.tex
@@ -0,0 +1,275 @@
+\hypertarget{sgb_8h}{}\doxysubsection{gb/sgb.h File Reference}
+\label{sgb_8h}\index{gb/sgb.h@{gb/sgb.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{sgb_8h_a70bdb512d109fbcaeb95efa32e9dcaf5}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+01}}~0x00U
+\item
+\#define \mbox{\hyperlink{sgb_8h_acaa2f1ac9949189896582fc5ad0823b1}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+23}}~0x01U
+\item
+\#define \mbox{\hyperlink{sgb_8h_af9e1ca804555fad619db3f38b62a49e8}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+03}}~0x02U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a8d633d52d4a7adfaef516953d5e8552a}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+12}}~0x03U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a6437bd5982922fffdbc7c5d8c643e357}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+B\+LK}}~0x04U
+\item
+\#define \mbox{\hyperlink{sgb_8h_ade5ba9723a9964e55cff72108149037a}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+L\+IN}}~0x05U
+\item
+\#define \mbox{\hyperlink{sgb_8h_adcb3f50616813637283f88bfd4d53e22}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+D\+IV}}~0x06U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a41981a213b67bdc45bf8ed78f07e7bba}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+C\+HR}}~0x07U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a42e0fbc58e65874e0a76d7f33a322ce8}{S\+G\+B\+\_\+\+S\+O\+U\+ND}}~0x08U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a82a976ea6a32ae0078a27e3c06143bcf}{S\+G\+B\+\_\+\+S\+O\+U\+\_\+\+T\+RN}}~0x09U
+\item
+\#define \mbox{\hyperlink{sgb_8h_ad9023ed1d8dd4a2eebc55a376207f3d2}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+\+S\+ET}}~0x0\+AU
+\item
+\#define \mbox{\hyperlink{sgb_8h_ac490ce8566f869727e8b00fabb1c9fc6}{S\+G\+B\+\_\+\+P\+A\+L\+\_\+\+T\+RN}}~0x0\+BU
+\item
+\#define \mbox{\hyperlink{sgb_8h_a3d81b1e455d60d760ee58e2685953775}{S\+G\+B\+\_\+\+A\+T\+R\+C\+\_\+\+EN}}~0x0\+CU
+\item
+\#define \mbox{\hyperlink{sgb_8h_a8e644a43af63932283e9c78a472881dc}{S\+G\+B\+\_\+\+T\+E\+S\+T\+\_\+\+EN}}~0x0\+DU
+\item
+\#define \mbox{\hyperlink{sgb_8h_a46440df1df1597852a286d56c1a68a48}{S\+G\+B\+\_\+\+I\+C\+O\+N\+\_\+\+EN}}~0x0\+EU
+\item
+\#define \mbox{\hyperlink{sgb_8h_ae4fe10a0c9eca38d126f3a8701e3c9a2}{S\+G\+B\+\_\+\+D\+A\+T\+A\+\_\+\+S\+ND}}~0x0\+FU
+\item
+\#define \mbox{\hyperlink{sgb_8h_a862a450451cfccf138311089b85292fc}{S\+G\+B\+\_\+\+D\+A\+T\+A\+\_\+\+T\+RN}}~0x10U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a70aad9e5786ca8a4753c47583e88f8a2}{S\+G\+B\+\_\+\+M\+L\+T\+\_\+\+R\+EQ}}~0x11U
+\item
+\#define \mbox{\hyperlink{sgb_8h_aac4217b88053614f70af5b1f32e72870}{S\+G\+B\+\_\+\+J\+U\+MP}}~0x12U
+\item
+\#define \mbox{\hyperlink{sgb_8h_af4d8b611dfdda33039038375ee95f424}{S\+G\+B\+\_\+\+C\+H\+R\+\_\+\+T\+RN}}~0x13U
+\item
+\#define \mbox{\hyperlink{sgb_8h_ac0bf9d5dc54d711fd14f44bf58eaa5db}{S\+G\+B\+\_\+\+P\+C\+T\+\_\+\+T\+RN}}~0x14U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a1762d2df2599cf864400bac4934a5d61}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+T\+RN}}~0x15U
+\item
+\#define \mbox{\hyperlink{sgb_8h_abf8d94c42e97e1ce640340657df70640}{S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+S\+ET}}~0x16U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a20477d5772564b63de2d151e062dd5a7}{S\+G\+B\+\_\+\+M\+A\+S\+K\+\_\+\+EN}}~0x17U
+\item
+\#define \mbox{\hyperlink{sgb_8h_a3b76bf1e9ac81da97c533fa3ab12096c}{S\+G\+B\+\_\+\+O\+B\+J\+\_\+\+T\+RN}}~0x18U
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sgb_8h_a48bc560ec2455bf97002e03c0a6055f0}{sgb\+\_\+check}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sgb_8h_a84e1f2ab7dce1faabd3d271b6bf8df8c}{sgb\+\_\+transfer}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$packet) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sgb_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Super Gameboy definitions.
+
+See the example S\+GB project for additional details.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{sgb_8h_a70bdb512d109fbcaeb95efa32e9dcaf5}\label{sgb_8h_a70bdb512d109fbcaeb95efa32e9dcaf5}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_01@{SGB\_PAL\_01}}
+\index{SGB\_PAL\_01@{SGB\_PAL\_01}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_01}{SGB\_PAL\_01}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+01~0x00U}
+
+S\+GB Command\+: Set S\+GB Palettes 0 \& 1 \mbox{\Hypertarget{sgb_8h_acaa2f1ac9949189896582fc5ad0823b1}\label{sgb_8h_acaa2f1ac9949189896582fc5ad0823b1}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_23@{SGB\_PAL\_23}}
+\index{SGB\_PAL\_23@{SGB\_PAL\_23}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_23}{SGB\_PAL\_23}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+23~0x01U}
+
+S\+GB Command\+: Set S\+GB Palettes 2 \& 3 \mbox{\Hypertarget{sgb_8h_af9e1ca804555fad619db3f38b62a49e8}\label{sgb_8h_af9e1ca804555fad619db3f38b62a49e8}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_03@{SGB\_PAL\_03}}
+\index{SGB\_PAL\_03@{SGB\_PAL\_03}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_03}{SGB\_PAL\_03}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+03~0x02U}
+
+S\+GB Command\+: Set S\+GB Palettes 0 \& 3 \mbox{\Hypertarget{sgb_8h_a8d633d52d4a7adfaef516953d5e8552a}\label{sgb_8h_a8d633d52d4a7adfaef516953d5e8552a}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_12@{SGB\_PAL\_12}}
+\index{SGB\_PAL\_12@{SGB\_PAL\_12}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_12}{SGB\_PAL\_12}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+12~0x03U}
+
+S\+GB Command\+: Set S\+GB Palettes 1 \& 2 \mbox{\Hypertarget{sgb_8h_a6437bd5982922fffdbc7c5d8c643e357}\label{sgb_8h_a6437bd5982922fffdbc7c5d8c643e357}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_BLK@{SGB\_ATTR\_BLK}}
+\index{SGB\_ATTR\_BLK@{SGB\_ATTR\_BLK}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_BLK}{SGB\_ATTR\_BLK}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+B\+LK~0x04U}
+
+S\+GB Command\+: Set color attributes for rectangular regions \mbox{\Hypertarget{sgb_8h_ade5ba9723a9964e55cff72108149037a}\label{sgb_8h_ade5ba9723a9964e55cff72108149037a}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_LIN@{SGB\_ATTR\_LIN}}
+\index{SGB\_ATTR\_LIN@{SGB\_ATTR\_LIN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_LIN}{SGB\_ATTR\_LIN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+L\+IN~0x05U}
+
+S\+GB Command\+: Set color attributes for horizontal or vertical character lines \mbox{\Hypertarget{sgb_8h_adcb3f50616813637283f88bfd4d53e22}\label{sgb_8h_adcb3f50616813637283f88bfd4d53e22}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_DIV@{SGB\_ATTR\_DIV}}
+\index{SGB\_ATTR\_DIV@{SGB\_ATTR\_DIV}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_DIV}{SGB\_ATTR\_DIV}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+D\+IV~0x06U}
+
+S\+GB Command\+: Split screen in half and assign separate color attribes to each side and the divider \mbox{\Hypertarget{sgb_8h_a41981a213b67bdc45bf8ed78f07e7bba}\label{sgb_8h_a41981a213b67bdc45bf8ed78f07e7bba}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_CHR@{SGB\_ATTR\_CHR}}
+\index{SGB\_ATTR\_CHR@{SGB\_ATTR\_CHR}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_CHR}{SGB\_ATTR\_CHR}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+C\+HR~0x07U}
+
+S\+GB Command\+: Set color attributes for separate characters\+Set S\+GB Palette 0,1 Data \mbox{\Hypertarget{sgb_8h_a42e0fbc58e65874e0a76d7f33a322ce8}\label{sgb_8h_a42e0fbc58e65874e0a76d7f33a322ce8}}
+\index{sgb.h@{sgb.h}!SGB\_SOUND@{SGB\_SOUND}}
+\index{SGB\_SOUND@{SGB\_SOUND}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_SOUND}{SGB\_SOUND}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+S\+O\+U\+ND~0x08U}
+
+S\+GB Command\+: Start and stop a internal sound effect, and sounds using internal tone data \mbox{\Hypertarget{sgb_8h_a82a976ea6a32ae0078a27e3c06143bcf}\label{sgb_8h_a82a976ea6a32ae0078a27e3c06143bcf}}
+\index{sgb.h@{sgb.h}!SGB\_SOU\_TRN@{SGB\_SOU\_TRN}}
+\index{SGB\_SOU\_TRN@{SGB\_SOU\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_SOU\_TRN}{SGB\_SOU\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+S\+O\+U\+\_\+\+T\+RN~0x09U}
+
+S\+GB Command\+: Transfer sound code or data to the S\+N\+ES A\+PU R\+AM \mbox{\Hypertarget{sgb_8h_ad9023ed1d8dd4a2eebc55a376207f3d2}\label{sgb_8h_ad9023ed1d8dd4a2eebc55a376207f3d2}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_SET@{SGB\_PAL\_SET}}
+\index{SGB\_PAL\_SET@{SGB\_PAL\_SET}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_SET}{SGB\_PAL\_SET}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+\+S\+ET~0x0\+AU}
+
+S\+GB Command\+: Apply (previously transferred) S\+GB system color palettes to actual S\+N\+ES palettes \mbox{\Hypertarget{sgb_8h_ac490ce8566f869727e8b00fabb1c9fc6}\label{sgb_8h_ac490ce8566f869727e8b00fabb1c9fc6}}
+\index{sgb.h@{sgb.h}!SGB\_PAL\_TRN@{SGB\_PAL\_TRN}}
+\index{SGB\_PAL\_TRN@{SGB\_PAL\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PAL\_TRN}{SGB\_PAL\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+A\+L\+\_\+\+T\+RN~0x0\+BU}
+
+S\+GB Command\+: Transfer palette data into S\+GB system color palettes \mbox{\Hypertarget{sgb_8h_a3d81b1e455d60d760ee58e2685953775}\label{sgb_8h_a3d81b1e455d60d760ee58e2685953775}}
+\index{sgb.h@{sgb.h}!SGB\_ATRC\_EN@{SGB\_ATRC\_EN}}
+\index{SGB\_ATRC\_EN@{SGB\_ATRC\_EN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATRC\_EN}{SGB\_ATRC\_EN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+R\+C\+\_\+\+EN~0x0\+CU}
+
+S\+GB Command\+: Enable/disable Attraction mode. It is enabled by default \mbox{\Hypertarget{sgb_8h_a8e644a43af63932283e9c78a472881dc}\label{sgb_8h_a8e644a43af63932283e9c78a472881dc}}
+\index{sgb.h@{sgb.h}!SGB\_TEST\_EN@{SGB\_TEST\_EN}}
+\index{SGB\_TEST\_EN@{SGB\_TEST\_EN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_TEST\_EN}{SGB\_TEST\_EN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+T\+E\+S\+T\+\_\+\+EN~0x0\+DU}
+
+S\+GB Command\+: Enable/disable test mode for \char`\"{}\+S\+G\+B-\/\+C\+P\+U variable clock speed function\char`\"{} \mbox{\Hypertarget{sgb_8h_a46440df1df1597852a286d56c1a68a48}\label{sgb_8h_a46440df1df1597852a286d56c1a68a48}}
+\index{sgb.h@{sgb.h}!SGB\_ICON\_EN@{SGB\_ICON\_EN}}
+\index{SGB\_ICON\_EN@{SGB\_ICON\_EN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ICON\_EN}{SGB\_ICON\_EN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+I\+C\+O\+N\+\_\+\+EN~0x0\+EU}
+
+S\+GB Command\+: Enable/disable I\+C\+ON functionality \mbox{\Hypertarget{sgb_8h_ae4fe10a0c9eca38d126f3a8701e3c9a2}\label{sgb_8h_ae4fe10a0c9eca38d126f3a8701e3c9a2}}
+\index{sgb.h@{sgb.h}!SGB\_DATA\_SND@{SGB\_DATA\_SND}}
+\index{SGB\_DATA\_SND@{SGB\_DATA\_SND}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_DATA\_SND}{SGB\_DATA\_SND}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+D\+A\+T\+A\+\_\+\+S\+ND~0x0\+FU}
+
+S\+GB Command\+: Write one or more bytes into S\+N\+ES Work R\+AM \mbox{\Hypertarget{sgb_8h_a862a450451cfccf138311089b85292fc}\label{sgb_8h_a862a450451cfccf138311089b85292fc}}
+\index{sgb.h@{sgb.h}!SGB\_DATA\_TRN@{SGB\_DATA\_TRN}}
+\index{SGB\_DATA\_TRN@{SGB\_DATA\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_DATA\_TRN}{SGB\_DATA\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+D\+A\+T\+A\+\_\+\+T\+RN~0x10U}
+
+S\+GB Command\+: Transfer code or data into S\+N\+ES R\+AM \mbox{\Hypertarget{sgb_8h_a70aad9e5786ca8a4753c47583e88f8a2}\label{sgb_8h_a70aad9e5786ca8a4753c47583e88f8a2}}
+\index{sgb.h@{sgb.h}!SGB\_MLT\_REQ@{SGB\_MLT\_REQ}}
+\index{SGB\_MLT\_REQ@{SGB\_MLT\_REQ}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_MLT\_REQ}{SGB\_MLT\_REQ}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+M\+L\+T\+\_\+\+R\+EQ~0x11U}
+
+S\+GB Command\+: Request multiplayer mode (input from more than one joypad) \mbox{\Hypertarget{sgb_8h_aac4217b88053614f70af5b1f32e72870}\label{sgb_8h_aac4217b88053614f70af5b1f32e72870}}
+\index{sgb.h@{sgb.h}!SGB\_JUMP@{SGB\_JUMP}}
+\index{SGB\_JUMP@{SGB\_JUMP}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_JUMP}{SGB\_JUMP}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+J\+U\+MP~0x12U}
+
+S\+GB Command\+: Set the S\+N\+ES program counter and N\+MI (vblank interrupt) handler to specific addresses \mbox{\Hypertarget{sgb_8h_af4d8b611dfdda33039038375ee95f424}\label{sgb_8h_af4d8b611dfdda33039038375ee95f424}}
+\index{sgb.h@{sgb.h}!SGB\_CHR\_TRN@{SGB\_CHR\_TRN}}
+\index{SGB\_CHR\_TRN@{SGB\_CHR\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_CHR\_TRN}{SGB\_CHR\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+C\+H\+R\+\_\+\+T\+RN~0x13U}
+
+S\+GB Command\+: Transfer tile data (characters) to S\+N\+ES Tile memory \mbox{\Hypertarget{sgb_8h_ac0bf9d5dc54d711fd14f44bf58eaa5db}\label{sgb_8h_ac0bf9d5dc54d711fd14f44bf58eaa5db}}
+\index{sgb.h@{sgb.h}!SGB\_PCT\_TRN@{SGB\_PCT\_TRN}}
+\index{SGB\_PCT\_TRN@{SGB\_PCT\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_PCT\_TRN}{SGB\_PCT\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+P\+C\+T\+\_\+\+T\+RN~0x14U}
+
+S\+GB Command\+: Transfer tile map and palette data to S\+N\+ES BG Map memory \mbox{\Hypertarget{sgb_8h_a1762d2df2599cf864400bac4934a5d61}\label{sgb_8h_a1762d2df2599cf864400bac4934a5d61}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_TRN@{SGB\_ATTR\_TRN}}
+\index{SGB\_ATTR\_TRN@{SGB\_ATTR\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_TRN}{SGB\_ATTR\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+T\+RN~0x15U}
+
+S\+GB Command\+: Transfer data to (color) Attribute Files (A\+T\+Fs) in S\+N\+ES R\+AM \mbox{\Hypertarget{sgb_8h_abf8d94c42e97e1ce640340657df70640}\label{sgb_8h_abf8d94c42e97e1ce640340657df70640}}
+\index{sgb.h@{sgb.h}!SGB\_ATTR\_SET@{SGB\_ATTR\_SET}}
+\index{SGB\_ATTR\_SET@{SGB\_ATTR\_SET}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_ATTR\_SET}{SGB\_ATTR\_SET}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+A\+T\+T\+R\+\_\+\+S\+ET~0x16U}
+
+S\+GB Command\+: Transfer attributes from (color) Attribute Files (A\+TF) to the Game Boy window \mbox{\Hypertarget{sgb_8h_a20477d5772564b63de2d151e062dd5a7}\label{sgb_8h_a20477d5772564b63de2d151e062dd5a7}}
+\index{sgb.h@{sgb.h}!SGB\_MASK\_EN@{SGB\_MASK\_EN}}
+\index{SGB\_MASK\_EN@{SGB\_MASK\_EN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_MASK\_EN}{SGB\_MASK\_EN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+M\+A\+S\+K\+\_\+\+EN~0x17U}
+
+S\+GB Command\+: Modify Game Boy window mask settings \mbox{\Hypertarget{sgb_8h_a3b76bf1e9ac81da97c533fa3ab12096c}\label{sgb_8h_a3b76bf1e9ac81da97c533fa3ab12096c}}
+\index{sgb.h@{sgb.h}!SGB\_OBJ\_TRN@{SGB\_OBJ\_TRN}}
+\index{SGB\_OBJ\_TRN@{SGB\_OBJ\_TRN}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{SGB\_OBJ\_TRN}{SGB\_OBJ\_TRN}}
+{\footnotesize\ttfamily \#define S\+G\+B\+\_\+\+O\+B\+J\+\_\+\+T\+RN~0x18U}
+
+S\+GB Command\+: Transfer O\+BJ attributes to S\+N\+ES O\+AM memory
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{sgb_8h_a48bc560ec2455bf97002e03c0a6055f0}\label{sgb_8h_a48bc560ec2455bf97002e03c0a6055f0}}
+\index{sgb.h@{sgb.h}!sgb\_check@{sgb\_check}}
+\index{sgb\_check@{sgb\_check}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{sgb\_check()}{sgb\_check()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} sgb\+\_\+check (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns a non-\/null value if running on Super Game\+Boy \mbox{\Hypertarget{sgb_8h_a84e1f2ab7dce1faabd3d271b6bf8df8c}\label{sgb_8h_a84e1f2ab7dce1faabd3d271b6bf8df8c}}
+\index{sgb.h@{sgb.h}!sgb\_transfer@{sgb\_transfer}}
+\index{sgb\_transfer@{sgb\_transfer}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{sgb\_transfer()}{sgb\_transfer()}}
+{\footnotesize\ttfamily void sgb\+\_\+transfer (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{packet }\end{DoxyParamCaption})}
+
+Transfer a S\+GB packet
+
+
+\begin{DoxyParams}{Parameters}
+{\em packet} & Pointer to buffer with S\+GB packet data.\\
+\hline
+\end{DoxyParams}
+The first byte of {\bfseries{packet}} should be a S\+GB command, then up to 15 bytes of command parameter data.
+
+See the {\ttfamily sgb\+\_\+border} G\+B\+DK example project for a demo of how to use these the sgb functions.
+
+When using the S\+GB with a P\+AL S\+N\+ES, a delay should be added just after program startup such as\+:
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{comment}{// Wait 4 frames}}
+\DoxyCodeLine{\textcolor{comment}{// For PAL SNES this delay is required on startup}}
+\DoxyCodeLine{\textcolor{keywordflow}{for} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} i = 4; i != 0; i-\/-\/) \mbox{\hyperlink{gb_8h_acd186eb292d441f9389e77b545a55619}{wait\_vbl\_done}}();}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sgb_8h_a48bc560ec2455bf97002e03c0a6055f0}{sgb\+\_\+check()}}
+\end{DoxySeeAlso}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{sgb_8h_a0b3366755f3276b0243c1e0497471b7a}\label{sgb_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{sgb.h@{sgb.h}!c@{c}}
+\index{c@{c}!sgb.h@{sgb.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
diff --git a/docs/latex/sms_2gbdecompress_8h.tex b/docs/latex/sms_2gbdecompress_8h.tex
new file mode 100644
index 00000000..fdded1e4
--- /dev/null
+++ b/docs/latex/sms_2gbdecompress_8h.tex
@@ -0,0 +1,47 @@
+\hypertarget{sms_2gbdecompress_8h}{}\doxysubsection{sms/gbdecompress.h File Reference}
+\label{sms_2gbdecompress_8h}\index{sms/gbdecompress.h@{sms/gbdecompress.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_2gbdecompress_8h_a9cd1564f78842562c450becf22002db2}{gb\+\_\+decompress}} (const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$sour, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$dest) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_2gbdecompress_8h_add06ad5d8520e7cff4ff84b2811c0982}{c}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{sms_2gbdecompress_8h_a9cd1564f78842562c450becf22002db2}\label{sms_2gbdecompress_8h_a9cd1564f78842562c450becf22002db2}}
+\index{gbdecompress.h@{gbdecompress.h}!gb\_decompress@{gb\_decompress}}
+\index{gb\_decompress@{gb\_decompress}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{gb\_decompress()}{gb\_decompress()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} gb\+\_\+decompress (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{sour, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{dest }\end{DoxyParamCaption})}
+
+gb-\/decompress data from sour into dest
+
+
+\begin{DoxyParams}{Parameters}
+{\em sour} & Pointer to source gb-\/compressed data \\
+\hline
+{\em dest} & Pointer to destination buffer/address\\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Return value is number of bytes decompressed
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_2gbdecompress_8h_aed0cb0f1604a80ca5e7fb771b04114d8}{gb\+\_\+decompress\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_a85d2eaf4a7c268fe1496fa2b9c626284}{gb\+\_\+decompress\+\_\+win\+\_\+data}}, \mbox{\hyperlink{gb_2gbdecompress_8h_aa4ac6ffb1dc949051e0e72e2aba8e6ff}{gb\+\_\+decompress\+\_\+sprite\+\_\+data}}
+\end{DoxySeeAlso}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{sms_2gbdecompress_8h_add06ad5d8520e7cff4ff84b2811c0982}\label{sms_2gbdecompress_8h_add06ad5d8520e7cff4ff84b2811c0982}}
+\index{gbdecompress.h@{gbdecompress.h}!c@{c}}
+\index{c@{c}!gbdecompress.h@{gbdecompress.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} c}
+
diff --git a/docs/latex/sms_2hardware_8h.tex b/docs/latex/sms_2hardware_8h.tex
new file mode 100644
index 00000000..f319c6de
--- /dev/null
+++ b/docs/latex/sms_2hardware_8h.tex
@@ -0,0 +1,986 @@
+\hypertarget{sms_2hardware_8h}{}\doxysubsection{sms/hardware.h File Reference}
+\label{sms_2hardware_8h}\index{sms/hardware.h@{sms/hardware.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}{\+\_\+\+\_\+\+B\+Y\+T\+ES}}~extern \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}{\+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG}}~extern volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_af4607245a47e34bd6af5d2d43d7fb30f}{M\+E\+M\+C\+T\+L\+\_\+\+J\+O\+Y\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ad8b8ecb5a71567cabc47af43da5dadf1}{M\+E\+M\+C\+T\+L\+\_\+\+J\+O\+Y\+O\+FF}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a2a98128eb9ca41477c139988da9d803f}{M\+E\+M\+C\+T\+L\+\_\+\+B\+A\+S\+E\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a29d7c3b98f855f88d6bb3f380b301d64}{M\+E\+M\+C\+T\+L\+\_\+\+B\+A\+S\+E\+O\+FF}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_af4522efccaecbb6ce47a337f6dbada24}{M\+E\+M\+C\+T\+L\+\_\+\+R\+A\+M\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_adbfef6bdd2da5ba3901e91062390bb68}{M\+E\+M\+C\+T\+L\+\_\+\+R\+A\+M\+O\+FF}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ad729a51cb551d9ee8bfb57c50c9dfd11}{M\+E\+M\+C\+T\+L\+\_\+\+C\+R\+O\+M\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a79ca0cc4a9979b2eeaeda61b043b36ae}{M\+E\+M\+C\+T\+L\+\_\+\+C\+R\+O\+M\+O\+FF}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a27b47b593a0d021ab342dfc744403b86}{M\+E\+M\+C\+T\+L\+\_\+\+R\+O\+M\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a25882a19ebfb78cd09158a5f743a6409}{M\+E\+M\+C\+T\+L\+\_\+\+R\+O\+M\+O\+FF}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a41654dd6b42ebdd213edc44494855caf}{M\+E\+M\+C\+T\+L\+\_\+\+E\+X\+T\+ON}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ac4c1790dd7397ef1005190dc01b3e808}{M\+E\+M\+C\+T\+L\+\_\+\+E\+X\+T\+O\+FF}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aa8e128eeff1d58f674cebdbacc413f3c}{J\+O\+Y\+\_\+\+P1\+\_\+\+L\+A\+T\+CH}}~0b00000010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a2cfa517650949a89a7ebabf0253fcdf7}{J\+O\+Y\+\_\+\+P2\+\_\+\+L\+A\+T\+CH}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a6777f1ed2475b5ba6aa60b9a16fa02d3}{P\+S\+G\+\_\+\+L\+A\+T\+CH}}~0x80
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ad8a903de6b38e08e1591fc5ef278381c}{P\+S\+G\+\_\+\+C\+H0}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_addc12c4ee03ea787b826e337f1acd317}{P\+S\+G\+\_\+\+C\+H1}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aaeefb1ac1fb4d0d2324b8ee7f4953226}{P\+S\+G\+\_\+\+C\+H2}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ac760259fb86ee72abb5922018ae0db42}{P\+S\+G\+\_\+\+C\+H3}}~0b01100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a3d806ff027bffa67c4dfc5967f87c1d1}{P\+S\+G\+\_\+\+V\+O\+L\+U\+ME}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a4702e74fffdc57d60c3835e63c665cc1}{S\+T\+A\+T\+F\+\_\+\+I\+N\+T\+\_\+\+V\+BL}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a4a7b807e5e5987302a5315fe5c815ce8}{S\+T\+A\+T\+F\+\_\+9\+\_\+\+S\+PR}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a6fdd982d805d5af6de0417e24faf027d}{S\+T\+A\+T\+F\+\_\+\+S\+P\+R\+\_\+\+C\+O\+LL}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a99ca7572e3708ffed188359799045b19}{V\+D\+P\+\_\+\+R\+E\+G\+\_\+\+M\+A\+SK}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a283c5cad8b93ee7e72ad07aabb9bf522}{R0\+\_\+\+V\+S\+C\+RL}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a65fa6547c2cd80b353a0b266cd834ff0}{R0\+\_\+\+V\+S\+C\+R\+L\+\_\+\+I\+NH}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a61143072ad490ff0050177e7b4b2dd40}{R0\+\_\+\+H\+S\+C\+RL}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a5c238a0b81716020b92cf851b2498b96}{R0\+\_\+\+H\+S\+C\+R\+L\+\_\+\+I\+NH}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_acdd680365862fb618641818646edeb7e}{R0\+\_\+\+N\+O\+\_\+\+L\+CB}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}{R0\+\_\+\+L\+CB}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a56819f822caf1e545ff803d41cac3ede}{R0\+\_\+\+I\+E1\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ae9ab439a46f9918cc24453cd65f95202}{R0\+\_\+\+I\+E1}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a10e6ffa0580e9956440f4259a3e79a38}{R0\+\_\+\+S\+S\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ada8068942691b363f9004ccfd0cb8e82}{R0\+\_\+\+SS}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_af69775608c5d3218fb769c4fb370685f}{R0\+\_\+\+D\+E\+F\+A\+U\+LT}}~0b00000110
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aebdf04065a0abf79ae8e1016d03caa1f}{R0\+\_\+\+E\+S\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a07d8e5a18c957c482218804ab764dab9}{R0\+\_\+\+ES}}~0b00000001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}~0b10000001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a490562a6e4b57d7bf25e8fed3b3f6905}{R1\+\_\+\+D\+E\+F\+A\+U\+LT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a143660061646a3f502d03a2251575588}{R1\+\_\+\+D\+I\+S\+P\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_adbfdd7c42539613c371820dffd14906f}{R1\+\_\+\+D\+I\+S\+P\+\_\+\+ON}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_adf542fd9d2bf9affc6016718e3885473}{R1\+\_\+\+I\+E\+\_\+\+O\+FF}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a29a2945a9e77ba1f003a2305b7500568}{R1\+\_\+\+IE}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aa4062707b9b0f9ff5d1ee982ccc42fe7}{R1\+\_\+\+S\+P\+R\+\_\+8\+X8}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}{R1\+\_\+\+S\+P\+R\+\_\+8\+X16}}~0b00000010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a2c9f91fcf2aad494a80e967f0c4bb414}{V\+D\+P\+\_\+\+R2}}~0b10000010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a8ce8807a3666fa8c7c93d4834ab22fe3}{R2\+\_\+\+M\+A\+P\+\_\+0x3800}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a725647b41b3c8083a7ae8db762ffc880}{R2\+\_\+\+M\+A\+P\+\_\+0x3000}}~0x\+FD
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a43ae738f82e8c6e84d30a96fb9c2c792}{R2\+\_\+\+M\+A\+P\+\_\+0x2800}}~0x\+FB
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aa2c53c6a4d12fb0614c1a18c015e39af}{R2\+\_\+\+M\+A\+P\+\_\+0x2000}}~0x\+F9
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a08fade3bc2afb94785b0ac50d6959faa}{R2\+\_\+\+M\+A\+P\+\_\+0x1800}}~0x\+F7
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a43a631b4692a370b2db6b9d5fc2512e1}{R2\+\_\+\+M\+A\+P\+\_\+0x1000}}~0x\+F5
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a64cfebfe759bacd1424ad147931ff5a3}{R2\+\_\+\+M\+A\+P\+\_\+0x0800}}~0x\+F3
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_acf804b73635a1bfeb04b7dbeafb7fd9f}{R2\+\_\+\+M\+A\+P\+\_\+0x0000}}~0x\+F1
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a2a58ae82037e16756404df4820a23f47}{V\+D\+P\+\_\+\+R3}}~0b10000011
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a5d1f215594c86a9e3d670f5a7f89e301}{V\+D\+P\+\_\+\+R4}}~0b10000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a75e2c9878fe4cc7c86f71d8e8fa09924}{V\+D\+P\+\_\+\+R5}}~0b10000101
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ae973ce797203f9e4bebc10f5010a8fdd}{R5\+\_\+\+S\+A\+T\+\_\+0x3\+F00}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ab0ea6874bcc910239b098025c9761c01}{R5\+\_\+\+S\+A\+T\+\_\+\+M\+A\+SK}}~0b10000001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a81ae7462829d0fcc65c3c99194a68772}{V\+D\+P\+\_\+\+R6}}~0b10000110
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a1aba84d3beebe43e641766525630d0ad}{R6\+\_\+\+B\+A\+N\+K0}}~0x\+FB
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a81289f179bb00ade9e4f7221ddff0e46}{R6\+\_\+\+D\+A\+T\+A\+\_\+0x0000}}~0x\+FB
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_adcc51095e67b158df848367761d735a4}{R6\+\_\+\+B\+A\+N\+K1}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ac59ac38e5ec2e23e511f854403d7cbe4}{R6\+\_\+\+D\+A\+T\+A\+\_\+0x2000}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aa82ab1c04cff3363327f3309d09ae638}{V\+D\+P\+\_\+\+R7}}~0b10000111
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_abef00e3cae6f12d97973b318ebbf9737}{V\+D\+P\+\_\+\+R\+B\+O\+R\+D\+ER}}~0b10000111
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aa1a024a7dc26ef40663fe283565bcf50}{R7\+\_\+\+C\+O\+L\+O\+R\+\_\+\+M\+A\+SK}}~0b11110000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a3cb38487469808e023fcb331c180c4b9}{V\+D\+P\+\_\+\+R8}}~0b10001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a9c49833bc96a70b8972027d28c816d2f}{V\+D\+P\+\_\+\+R\+S\+CX}}~0b10001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a294388f3d14b6fec1f1bbeafc7d0f91e}{V\+D\+P\+\_\+\+R9}}~0b10001001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a3cce162b45d638126c478c5b6f7bcbc7}{V\+D\+P\+\_\+\+R\+S\+CY}}~0b10001001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a1049d2a3f634380f4dffff619334a504}{V\+D\+P\+\_\+\+R10}}~0b10001010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a98d635ed568cfe9f853eaf7e1707dec4}{R10\+\_\+\+I\+N\+T\+\_\+\+O\+FF}}~0x\+FF
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_adf9e7ec5362058df23e1c0e4c06ad5d6}{R10\+\_\+\+I\+N\+T\+\_\+\+E\+V\+E\+RY}}~0x00
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a086bde6bcc92e5f4d3e9ae45f0de475e}{J\+O\+Y\+\_\+\+P1\+\_\+\+UP}}~0b00000001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ab4dd6ee624c6d9e5fe5820ce925ffb20}{J\+O\+Y\+\_\+\+P1\+\_\+\+D\+O\+WN}}~0b00000010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a7d709160cbd7b369109bf40161ae8ccd}{J\+O\+Y\+\_\+\+P1\+\_\+\+L\+E\+FT}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a1efece9134651ad4d2bd1836c1d1d6d6}{J\+O\+Y\+\_\+\+P1\+\_\+\+R\+I\+G\+HT}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_aacc8667a6d5d9683ed4876e52aba2d33}{J\+O\+Y\+\_\+\+P1\+\_\+\+S\+W1}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_af29f72f4cc7c94deae5fb9c29b1cc94f}{J\+O\+Y\+\_\+\+P1\+\_\+\+T\+R\+I\+G\+G\+ER}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a9ab9954d0c66751a154f7824e344806b}{J\+O\+Y\+\_\+\+P1\+\_\+\+S\+W2}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a307ba8e12d9273a99aa4830c5e0a3c88}{J\+O\+Y\+\_\+\+P2\+\_\+\+UP}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a6d4129d670d421656f5e9a1f4b68a7f4}{J\+O\+Y\+\_\+\+P2\+\_\+\+D\+O\+WN}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a2121cb75e0d570b0f92c7630bc1af25f}{J\+O\+Y\+\_\+\+P2\+\_\+\+L\+E\+FT}}~0b00000001
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a16dac3d386b8bc0da50c6c814952472d}{J\+O\+Y\+\_\+\+P2\+\_\+\+R\+I\+G\+HT}}~0b00000010
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a942e3ecdef267100c84a36f6e0dc0b51}{J\+O\+Y\+\_\+\+P2\+\_\+\+S\+W1}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_afe5ec4ca4d413ae5388be131d9c4f93b}{J\+O\+Y\+\_\+\+P2\+\_\+\+T\+R\+I\+G\+G\+ER}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a6d181ce63ff84bd559d13f4423a336b3}{J\+O\+Y\+\_\+\+P2\+\_\+\+S\+W2}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a5b3dff084cbb77646a337d94d16a1714}{J\+O\+Y\+\_\+\+R\+E\+S\+ET}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a772c8def7b33ad4fd3cbfc74d84441de}{J\+O\+Y\+\_\+\+P1\+\_\+\+L\+I\+G\+HT}}~0b01000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a42ded04442bd4fb4acf5333b248423fa}{J\+O\+Y\+\_\+\+P2\+\_\+\+L\+I\+G\+HT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a8f4dbe8a2e6389c78b9f6fb9a3ff1dca}{R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+NK}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a0167c8f86de8ef1a327b806c8ed0c64c}{R\+A\+M\+C\+T\+L\+\_\+\+R\+OM}}~0b00000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}{R\+A\+M\+C\+T\+L\+\_\+\+R\+AM}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_afa9ebb221cf9cd92038131ab588679bf}{R\+A\+M\+C\+T\+L\+\_\+\+RO}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a97eb5adb5f29e17ce5766728447317f5}{R\+A\+M\+C\+T\+L\+\_\+\+P\+R\+OT}}~0b10000000
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a1ac4bf5582e0754ea814c3f51c99a91a}{S\+Y\+S\+T\+E\+M\+\_\+\+P\+AL}}~0x00
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ae6888157a94fca2f1a1b5136494f2e07}{S\+Y\+S\+T\+E\+M\+\_\+\+N\+T\+SC}}~0x01
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ad3b833661b103edc2648258dd741c92c}{V\+D\+P\+\_\+\+S\+A\+T\+\_\+\+T\+E\+RM}}~0x\+D0
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}~(\mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}} $\ast$ 8)
+\item
+\#define \mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}~(\mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}} $\ast$ 8)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_aa80cb68338819c004095531d32b70e38}{shadow\+\_\+\+V\+D\+P\+\_\+\+R0}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a542cb696f242df44b0d8e9225d532ef4}{shadow\+\_\+\+V\+D\+P\+\_\+\+R1}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a7f7fa2c0e33c6d515332a50c2acb54e7}{shadow\+\_\+\+V\+D\+P\+\_\+\+R2}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_ab984056ff9eb011fbd84abdafb3a8bce}{shadow\+\_\+\+V\+D\+P\+\_\+\+R3}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_af9a30a728fedbe7e4c660c448c262e2c}{shadow\+\_\+\+V\+D\+P\+\_\+\+R4}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a221db76cb39200a948234330ed309af7}{shadow\+\_\+\+V\+D\+P\+\_\+\+R5}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a8afbdaaf8c6dee4e7482a341351344b4}{shadow\+\_\+\+V\+D\+P\+\_\+\+R6}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a33b3e7c120a579cb729caf588ba1d9a8}{shadow\+\_\+\+V\+D\+P\+\_\+\+R7}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a20a977182f6f5f60ee6464e15f05aed0}{shadow\+\_\+\+V\+D\+P\+\_\+\+R\+B\+O\+R\+D\+ER}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_add65b8e5f0b806e563ce27de7348ba31}{shadow\+\_\+\+V\+D\+P\+\_\+\+R8}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_af6a84b0288b045560f83a1944a8c1c3b}{shadow\+\_\+\+V\+D\+P\+\_\+\+R\+S\+CX}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a1ccce1e3f8acb76170fb752ee40ae659}{shadow\+\_\+\+V\+D\+P\+\_\+\+R9}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a292b59055beb22b566b39462da3b7eba}{shadow\+\_\+\+V\+D\+P\+\_\+\+R\+S\+CY}}
+\item
+\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_af310a900e3b4b5b5032f4ffd6fa309b0}{shadow\+\_\+\+V\+D\+P\+\_\+\+R10}}
+\item
+const \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a735fc9fb4f089391a584293f2dff1008}{\+\_\+\+B\+I\+OS}}
+\item
+const \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a7093bf38c5e663715f4efed44341502d}{\+\_\+\+S\+Y\+S\+T\+EM}}
+\item
+volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \mbox{\hyperlink{sms_2hardware_8h_a019bf78a6d586c987aec03af8d20e02f}{V\+D\+P\+\_\+\+A\+T\+T\+R\+\_\+\+S\+H\+I\+FT}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Defines that let the S\+M\+S/\+GG hardware registers be accessed from C.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}\label{sms_2hardware_8h_ab2767d5f8f0ad35d8c8ee0bb3f4c51c3}}
+\index{hardware.h@{hardware.h}!\_\_BYTES@{\_\_BYTES}}
+\index{\_\_BYTES@{\_\_BYTES}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_\_BYTES}{\_\_BYTES}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+B\+Y\+T\+ES~extern \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}\label{sms_2hardware_8h_a3b39604bdf93a32e9ff965c1a55f0df8}}
+\index{hardware.h@{hardware.h}!\_\_BYTE\_REG@{\_\_BYTE\_REG}}
+\index{\_\_BYTE\_REG@{\_\_BYTE\_REG}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_\_BYTE\_REG}{\_\_BYTE\_REG}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+B\+Y\+T\+E\+\_\+\+R\+EG~extern volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af4607245a47e34bd6af5d2d43d7fb30f}\label{sms_2hardware_8h_af4607245a47e34bd6af5d2d43d7fb30f}}
+\index{hardware.h@{hardware.h}!MEMCTL\_JOYON@{MEMCTL\_JOYON}}
+\index{MEMCTL\_JOYON@{MEMCTL\_JOYON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_JOYON}{MEMCTL\_JOYON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+J\+O\+Y\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ad8b8ecb5a71567cabc47af43da5dadf1}\label{sms_2hardware_8h_ad8b8ecb5a71567cabc47af43da5dadf1}}
+\index{hardware.h@{hardware.h}!MEMCTL\_JOYOFF@{MEMCTL\_JOYOFF}}
+\index{MEMCTL\_JOYOFF@{MEMCTL\_JOYOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_JOYOFF}{MEMCTL\_JOYOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+J\+O\+Y\+O\+FF~0b00000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a2a98128eb9ca41477c139988da9d803f}\label{sms_2hardware_8h_a2a98128eb9ca41477c139988da9d803f}}
+\index{hardware.h@{hardware.h}!MEMCTL\_BASEON@{MEMCTL\_BASEON}}
+\index{MEMCTL\_BASEON@{MEMCTL\_BASEON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_BASEON}{MEMCTL\_BASEON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+B\+A\+S\+E\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a29d7c3b98f855f88d6bb3f380b301d64}\label{sms_2hardware_8h_a29d7c3b98f855f88d6bb3f380b301d64}}
+\index{hardware.h@{hardware.h}!MEMCTL\_BASEOFF@{MEMCTL\_BASEOFF}}
+\index{MEMCTL\_BASEOFF@{MEMCTL\_BASEOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_BASEOFF}{MEMCTL\_BASEOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+B\+A\+S\+E\+O\+FF~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af4522efccaecbb6ce47a337f6dbada24}\label{sms_2hardware_8h_af4522efccaecbb6ce47a337f6dbada24}}
+\index{hardware.h@{hardware.h}!MEMCTL\_RAMON@{MEMCTL\_RAMON}}
+\index{MEMCTL\_RAMON@{MEMCTL\_RAMON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_RAMON}{MEMCTL\_RAMON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+R\+A\+M\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_adbfef6bdd2da5ba3901e91062390bb68}\label{sms_2hardware_8h_adbfef6bdd2da5ba3901e91062390bb68}}
+\index{hardware.h@{hardware.h}!MEMCTL\_RAMOFF@{MEMCTL\_RAMOFF}}
+\index{MEMCTL\_RAMOFF@{MEMCTL\_RAMOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_RAMOFF}{MEMCTL\_RAMOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+R\+A\+M\+O\+FF~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ad729a51cb551d9ee8bfb57c50c9dfd11}\label{sms_2hardware_8h_ad729a51cb551d9ee8bfb57c50c9dfd11}}
+\index{hardware.h@{hardware.h}!MEMCTL\_CROMON@{MEMCTL\_CROMON}}
+\index{MEMCTL\_CROMON@{MEMCTL\_CROMON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_CROMON}{MEMCTL\_CROMON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+C\+R\+O\+M\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a79ca0cc4a9979b2eeaeda61b043b36ae}\label{sms_2hardware_8h_a79ca0cc4a9979b2eeaeda61b043b36ae}}
+\index{hardware.h@{hardware.h}!MEMCTL\_CROMOFF@{MEMCTL\_CROMOFF}}
+\index{MEMCTL\_CROMOFF@{MEMCTL\_CROMOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_CROMOFF}{MEMCTL\_CROMOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+C\+R\+O\+M\+O\+FF~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a27b47b593a0d021ab342dfc744403b86}\label{sms_2hardware_8h_a27b47b593a0d021ab342dfc744403b86}}
+\index{hardware.h@{hardware.h}!MEMCTL\_ROMON@{MEMCTL\_ROMON}}
+\index{MEMCTL\_ROMON@{MEMCTL\_ROMON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_ROMON}{MEMCTL\_ROMON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+R\+O\+M\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a25882a19ebfb78cd09158a5f743a6409}\label{sms_2hardware_8h_a25882a19ebfb78cd09158a5f743a6409}}
+\index{hardware.h@{hardware.h}!MEMCTL\_ROMOFF@{MEMCTL\_ROMOFF}}
+\index{MEMCTL\_ROMOFF@{MEMCTL\_ROMOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_ROMOFF}{MEMCTL\_ROMOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+R\+O\+M\+O\+FF~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a41654dd6b42ebdd213edc44494855caf}\label{sms_2hardware_8h_a41654dd6b42ebdd213edc44494855caf}}
+\index{hardware.h@{hardware.h}!MEMCTL\_EXTON@{MEMCTL\_EXTON}}
+\index{MEMCTL\_EXTON@{MEMCTL\_EXTON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_EXTON}{MEMCTL\_EXTON}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+E\+X\+T\+ON~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ac4c1790dd7397ef1005190dc01b3e808}\label{sms_2hardware_8h_ac4c1790dd7397ef1005190dc01b3e808}}
+\index{hardware.h@{hardware.h}!MEMCTL\_EXTOFF@{MEMCTL\_EXTOFF}}
+\index{MEMCTL\_EXTOFF@{MEMCTL\_EXTOFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{MEMCTL\_EXTOFF}{MEMCTL\_EXTOFF}}
+{\footnotesize\ttfamily \#define M\+E\+M\+C\+T\+L\+\_\+\+E\+X\+T\+O\+FF~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aa8e128eeff1d58f674cebdbacc413f3c}\label{sms_2hardware_8h_aa8e128eeff1d58f674cebdbacc413f3c}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_LATCH@{JOY\_P1\_LATCH}}
+\index{JOY\_P1\_LATCH@{JOY\_P1\_LATCH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_LATCH}{JOY\_P1\_LATCH}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+L\+A\+T\+CH~0b00000010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a2cfa517650949a89a7ebabf0253fcdf7}\label{sms_2hardware_8h_a2cfa517650949a89a7ebabf0253fcdf7}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_LATCH@{JOY\_P2\_LATCH}}
+\index{JOY\_P2\_LATCH@{JOY\_P2\_LATCH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_LATCH}{JOY\_P2\_LATCH}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+L\+A\+T\+CH~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a6777f1ed2475b5ba6aa60b9a16fa02d3}\label{sms_2hardware_8h_a6777f1ed2475b5ba6aa60b9a16fa02d3}}
+\index{hardware.h@{hardware.h}!PSG\_LATCH@{PSG\_LATCH}}
+\index{PSG\_LATCH@{PSG\_LATCH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_LATCH}{PSG\_LATCH}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+L\+A\+T\+CH~0x80}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ad8a903de6b38e08e1591fc5ef278381c}\label{sms_2hardware_8h_ad8a903de6b38e08e1591fc5ef278381c}}
+\index{hardware.h@{hardware.h}!PSG\_CH0@{PSG\_CH0}}
+\index{PSG\_CH0@{PSG\_CH0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_CH0}{PSG\_CH0}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+C\+H0~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_addc12c4ee03ea787b826e337f1acd317}\label{sms_2hardware_8h_addc12c4ee03ea787b826e337f1acd317}}
+\index{hardware.h@{hardware.h}!PSG\_CH1@{PSG\_CH1}}
+\index{PSG\_CH1@{PSG\_CH1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_CH1}{PSG\_CH1}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+C\+H1~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aaeefb1ac1fb4d0d2324b8ee7f4953226}\label{sms_2hardware_8h_aaeefb1ac1fb4d0d2324b8ee7f4953226}}
+\index{hardware.h@{hardware.h}!PSG\_CH2@{PSG\_CH2}}
+\index{PSG\_CH2@{PSG\_CH2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_CH2}{PSG\_CH2}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+C\+H2~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ac760259fb86ee72abb5922018ae0db42}\label{sms_2hardware_8h_ac760259fb86ee72abb5922018ae0db42}}
+\index{hardware.h@{hardware.h}!PSG\_CH3@{PSG\_CH3}}
+\index{PSG\_CH3@{PSG\_CH3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_CH3}{PSG\_CH3}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+C\+H3~0b01100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a3d806ff027bffa67c4dfc5967f87c1d1}\label{sms_2hardware_8h_a3d806ff027bffa67c4dfc5967f87c1d1}}
+\index{hardware.h@{hardware.h}!PSG\_VOLUME@{PSG\_VOLUME}}
+\index{PSG\_VOLUME@{PSG\_VOLUME}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{PSG\_VOLUME}{PSG\_VOLUME}}
+{\footnotesize\ttfamily \#define P\+S\+G\+\_\+\+V\+O\+L\+U\+ME~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a4702e74fffdc57d60c3835e63c665cc1}\label{sms_2hardware_8h_a4702e74fffdc57d60c3835e63c665cc1}}
+\index{hardware.h@{hardware.h}!STATF\_INT\_VBL@{STATF\_INT\_VBL}}
+\index{STATF\_INT\_VBL@{STATF\_INT\_VBL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_INT\_VBL}{STATF\_INT\_VBL}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+I\+N\+T\+\_\+\+V\+BL~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a4a7b807e5e5987302a5315fe5c815ce8}\label{sms_2hardware_8h_a4a7b807e5e5987302a5315fe5c815ce8}}
+\index{hardware.h@{hardware.h}!STATF\_9\_SPR@{STATF\_9\_SPR}}
+\index{STATF\_9\_SPR@{STATF\_9\_SPR}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_9\_SPR}{STATF\_9\_SPR}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+9\+\_\+\+S\+PR~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a6fdd982d805d5af6de0417e24faf027d}\label{sms_2hardware_8h_a6fdd982d805d5af6de0417e24faf027d}}
+\index{hardware.h@{hardware.h}!STATF\_SPR\_COLL@{STATF\_SPR\_COLL}}
+\index{STATF\_SPR\_COLL@{STATF\_SPR\_COLL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{STATF\_SPR\_COLL}{STATF\_SPR\_COLL}}
+{\footnotesize\ttfamily \#define S\+T\+A\+T\+F\+\_\+\+S\+P\+R\+\_\+\+C\+O\+LL~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a99ca7572e3708ffed188359799045b19}\label{sms_2hardware_8h_a99ca7572e3708ffed188359799045b19}}
+\index{hardware.h@{hardware.h}!VDP\_REG\_MASK@{VDP\_REG\_MASK}}
+\index{VDP\_REG\_MASK@{VDP\_REG\_MASK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_REG\_MASK}{VDP\_REG\_MASK}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R\+E\+G\+\_\+\+M\+A\+SK~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}\label{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}}
+\index{hardware.h@{hardware.h}!VDP\_R0@{VDP\_R0}}
+\index{VDP\_R0@{VDP\_R0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R0}{VDP\_R0}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R0~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a283c5cad8b93ee7e72ad07aabb9bf522}\label{sms_2hardware_8h_a283c5cad8b93ee7e72ad07aabb9bf522}}
+\index{hardware.h@{hardware.h}!R0\_VSCRL@{R0\_VSCRL}}
+\index{R0\_VSCRL@{R0\_VSCRL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_VSCRL}{R0\_VSCRL}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+V\+S\+C\+RL~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a65fa6547c2cd80b353a0b266cd834ff0}\label{sms_2hardware_8h_a65fa6547c2cd80b353a0b266cd834ff0}}
+\index{hardware.h@{hardware.h}!R0\_VSCRL\_INH@{R0\_VSCRL\_INH}}
+\index{R0\_VSCRL\_INH@{R0\_VSCRL\_INH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_VSCRL\_INH}{R0\_VSCRL\_INH}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+V\+S\+C\+R\+L\+\_\+\+I\+NH~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a61143072ad490ff0050177e7b4b2dd40}\label{sms_2hardware_8h_a61143072ad490ff0050177e7b4b2dd40}}
+\index{hardware.h@{hardware.h}!R0\_HSCRL@{R0\_HSCRL}}
+\index{R0\_HSCRL@{R0\_HSCRL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_HSCRL}{R0\_HSCRL}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+H\+S\+C\+RL~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a5c238a0b81716020b92cf851b2498b96}\label{sms_2hardware_8h_a5c238a0b81716020b92cf851b2498b96}}
+\index{hardware.h@{hardware.h}!R0\_HSCRL\_INH@{R0\_HSCRL\_INH}}
+\index{R0\_HSCRL\_INH@{R0\_HSCRL\_INH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_HSCRL\_INH}{R0\_HSCRL\_INH}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+H\+S\+C\+R\+L\+\_\+\+I\+NH~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_acdd680365862fb618641818646edeb7e}\label{sms_2hardware_8h_acdd680365862fb618641818646edeb7e}}
+\index{hardware.h@{hardware.h}!R0\_NO\_LCB@{R0\_NO\_LCB}}
+\index{R0\_NO\_LCB@{R0\_NO\_LCB}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_NO\_LCB}{R0\_NO\_LCB}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+N\+O\+\_\+\+L\+CB~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}\label{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}}
+\index{hardware.h@{hardware.h}!R0\_LCB@{R0\_LCB}}
+\index{R0\_LCB@{R0\_LCB}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_LCB}{R0\_LCB}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+L\+CB~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a56819f822caf1e545ff803d41cac3ede}\label{sms_2hardware_8h_a56819f822caf1e545ff803d41cac3ede}}
+\index{hardware.h@{hardware.h}!R0\_IE1\_OFF@{R0\_IE1\_OFF}}
+\index{R0\_IE1\_OFF@{R0\_IE1\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_IE1\_OFF}{R0\_IE1\_OFF}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+I\+E1\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ae9ab439a46f9918cc24453cd65f95202}\label{sms_2hardware_8h_ae9ab439a46f9918cc24453cd65f95202}}
+\index{hardware.h@{hardware.h}!R0\_IE1@{R0\_IE1}}
+\index{R0\_IE1@{R0\_IE1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_IE1}{R0\_IE1}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+I\+E1~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a10e6ffa0580e9956440f4259a3e79a38}\label{sms_2hardware_8h_a10e6ffa0580e9956440f4259a3e79a38}}
+\index{hardware.h@{hardware.h}!R0\_SS\_OFF@{R0\_SS\_OFF}}
+\index{R0\_SS\_OFF@{R0\_SS\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_SS\_OFF}{R0\_SS\_OFF}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+S\+S\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ada8068942691b363f9004ccfd0cb8e82}\label{sms_2hardware_8h_ada8068942691b363f9004ccfd0cb8e82}}
+\index{hardware.h@{hardware.h}!R0\_SS@{R0\_SS}}
+\index{R0\_SS@{R0\_SS}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_SS}{R0\_SS}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+SS~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af69775608c5d3218fb769c4fb370685f}\label{sms_2hardware_8h_af69775608c5d3218fb769c4fb370685f}}
+\index{hardware.h@{hardware.h}!R0\_DEFAULT@{R0\_DEFAULT}}
+\index{R0\_DEFAULT@{R0\_DEFAULT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_DEFAULT}{R0\_DEFAULT}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+D\+E\+F\+A\+U\+LT~0b00000110}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aebdf04065a0abf79ae8e1016d03caa1f}\label{sms_2hardware_8h_aebdf04065a0abf79ae8e1016d03caa1f}}
+\index{hardware.h@{hardware.h}!R0\_ES\_OFF@{R0\_ES\_OFF}}
+\index{R0\_ES\_OFF@{R0\_ES\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_ES\_OFF}{R0\_ES\_OFF}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+E\+S\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a07d8e5a18c957c482218804ab764dab9}\label{sms_2hardware_8h_a07d8e5a18c957c482218804ab764dab9}}
+\index{hardware.h@{hardware.h}!R0\_ES@{R0\_ES}}
+\index{R0\_ES@{R0\_ES}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R0\_ES}{R0\_ES}}
+{\footnotesize\ttfamily \#define R0\+\_\+\+ES~0b00000001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}\label{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}}
+\index{hardware.h@{hardware.h}!VDP\_R1@{VDP\_R1}}
+\index{VDP\_R1@{VDP\_R1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R1}{VDP\_R1}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R1~0b10000001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a490562a6e4b57d7bf25e8fed3b3f6905}\label{sms_2hardware_8h_a490562a6e4b57d7bf25e8fed3b3f6905}}
+\index{hardware.h@{hardware.h}!R1\_DEFAULT@{R1\_DEFAULT}}
+\index{R1\_DEFAULT@{R1\_DEFAULT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_DEFAULT}{R1\_DEFAULT}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+D\+E\+F\+A\+U\+LT~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a143660061646a3f502d03a2251575588}\label{sms_2hardware_8h_a143660061646a3f502d03a2251575588}}
+\index{hardware.h@{hardware.h}!R1\_DISP\_OFF@{R1\_DISP\_OFF}}
+\index{R1\_DISP\_OFF@{R1\_DISP\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_DISP\_OFF}{R1\_DISP\_OFF}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+D\+I\+S\+P\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_adbfdd7c42539613c371820dffd14906f}\label{sms_2hardware_8h_adbfdd7c42539613c371820dffd14906f}}
+\index{hardware.h@{hardware.h}!R1\_DISP\_ON@{R1\_DISP\_ON}}
+\index{R1\_DISP\_ON@{R1\_DISP\_ON}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_DISP\_ON}{R1\_DISP\_ON}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+D\+I\+S\+P\+\_\+\+ON~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_adf542fd9d2bf9affc6016718e3885473}\label{sms_2hardware_8h_adf542fd9d2bf9affc6016718e3885473}}
+\index{hardware.h@{hardware.h}!R1\_IE\_OFF@{R1\_IE\_OFF}}
+\index{R1\_IE\_OFF@{R1\_IE\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_IE\_OFF}{R1\_IE\_OFF}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+I\+E\+\_\+\+O\+FF~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a29a2945a9e77ba1f003a2305b7500568}\label{sms_2hardware_8h_a29a2945a9e77ba1f003a2305b7500568}}
+\index{hardware.h@{hardware.h}!R1\_IE@{R1\_IE}}
+\index{R1\_IE@{R1\_IE}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_IE}{R1\_IE}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+IE~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aa4062707b9b0f9ff5d1ee982ccc42fe7}\label{sms_2hardware_8h_aa4062707b9b0f9ff5d1ee982ccc42fe7}}
+\index{hardware.h@{hardware.h}!R1\_SPR\_8X8@{R1\_SPR\_8X8}}
+\index{R1\_SPR\_8X8@{R1\_SPR\_8X8}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_SPR\_8X8}{R1\_SPR\_8X8}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+S\+P\+R\+\_\+8\+X8~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}\label{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}}
+\index{hardware.h@{hardware.h}!R1\_SPR\_8X16@{R1\_SPR\_8X16}}
+\index{R1\_SPR\_8X16@{R1\_SPR\_8X16}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R1\_SPR\_8X16}{R1\_SPR\_8X16}}
+{\footnotesize\ttfamily \#define R1\+\_\+\+S\+P\+R\+\_\+8\+X16~0b00000010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a2c9f91fcf2aad494a80e967f0c4bb414}\label{sms_2hardware_8h_a2c9f91fcf2aad494a80e967f0c4bb414}}
+\index{hardware.h@{hardware.h}!VDP\_R2@{VDP\_R2}}
+\index{VDP\_R2@{VDP\_R2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R2}{VDP\_R2}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R2~0b10000010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a8ce8807a3666fa8c7c93d4834ab22fe3}\label{sms_2hardware_8h_a8ce8807a3666fa8c7c93d4834ab22fe3}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x3800@{R2\_MAP\_0x3800}}
+\index{R2\_MAP\_0x3800@{R2\_MAP\_0x3800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x3800}{R2\_MAP\_0x3800}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x3800~0x\+FF}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a725647b41b3c8083a7ae8db762ffc880}\label{sms_2hardware_8h_a725647b41b3c8083a7ae8db762ffc880}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x3000@{R2\_MAP\_0x3000}}
+\index{R2\_MAP\_0x3000@{R2\_MAP\_0x3000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x3000}{R2\_MAP\_0x3000}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x3000~0x\+FD}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a43ae738f82e8c6e84d30a96fb9c2c792}\label{sms_2hardware_8h_a43ae738f82e8c6e84d30a96fb9c2c792}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x2800@{R2\_MAP\_0x2800}}
+\index{R2\_MAP\_0x2800@{R2\_MAP\_0x2800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x2800}{R2\_MAP\_0x2800}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x2800~0x\+FB}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aa2c53c6a4d12fb0614c1a18c015e39af}\label{sms_2hardware_8h_aa2c53c6a4d12fb0614c1a18c015e39af}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x2000@{R2\_MAP\_0x2000}}
+\index{R2\_MAP\_0x2000@{R2\_MAP\_0x2000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x2000}{R2\_MAP\_0x2000}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x2000~0x\+F9}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a08fade3bc2afb94785b0ac50d6959faa}\label{sms_2hardware_8h_a08fade3bc2afb94785b0ac50d6959faa}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x1800@{R2\_MAP\_0x1800}}
+\index{R2\_MAP\_0x1800@{R2\_MAP\_0x1800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x1800}{R2\_MAP\_0x1800}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x1800~0x\+F7}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a43a631b4692a370b2db6b9d5fc2512e1}\label{sms_2hardware_8h_a43a631b4692a370b2db6b9d5fc2512e1}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x1000@{R2\_MAP\_0x1000}}
+\index{R2\_MAP\_0x1000@{R2\_MAP\_0x1000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x1000}{R2\_MAP\_0x1000}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x1000~0x\+F5}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a64cfebfe759bacd1424ad147931ff5a3}\label{sms_2hardware_8h_a64cfebfe759bacd1424ad147931ff5a3}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x0800@{R2\_MAP\_0x0800}}
+\index{R2\_MAP\_0x0800@{R2\_MAP\_0x0800}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x0800}{R2\_MAP\_0x0800}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x0800~0x\+F3}
+
+\mbox{\Hypertarget{sms_2hardware_8h_acf804b73635a1bfeb04b7dbeafb7fd9f}\label{sms_2hardware_8h_acf804b73635a1bfeb04b7dbeafb7fd9f}}
+\index{hardware.h@{hardware.h}!R2\_MAP\_0x0000@{R2\_MAP\_0x0000}}
+\index{R2\_MAP\_0x0000@{R2\_MAP\_0x0000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R2\_MAP\_0x0000}{R2\_MAP\_0x0000}}
+{\footnotesize\ttfamily \#define R2\+\_\+\+M\+A\+P\+\_\+0x0000~0x\+F1}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a2a58ae82037e16756404df4820a23f47}\label{sms_2hardware_8h_a2a58ae82037e16756404df4820a23f47}}
+\index{hardware.h@{hardware.h}!VDP\_R3@{VDP\_R3}}
+\index{VDP\_R3@{VDP\_R3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R3}{VDP\_R3}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R3~0b10000011}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a5d1f215594c86a9e3d670f5a7f89e301}\label{sms_2hardware_8h_a5d1f215594c86a9e3d670f5a7f89e301}}
+\index{hardware.h@{hardware.h}!VDP\_R4@{VDP\_R4}}
+\index{VDP\_R4@{VDP\_R4}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R4}{VDP\_R4}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R4~0b10000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a75e2c9878fe4cc7c86f71d8e8fa09924}\label{sms_2hardware_8h_a75e2c9878fe4cc7c86f71d8e8fa09924}}
+\index{hardware.h@{hardware.h}!VDP\_R5@{VDP\_R5}}
+\index{VDP\_R5@{VDP\_R5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R5}{VDP\_R5}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R5~0b10000101}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ae973ce797203f9e4bebc10f5010a8fdd}\label{sms_2hardware_8h_ae973ce797203f9e4bebc10f5010a8fdd}}
+\index{hardware.h@{hardware.h}!R5\_SAT\_0x3F00@{R5\_SAT\_0x3F00}}
+\index{R5\_SAT\_0x3F00@{R5\_SAT\_0x3F00}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R5\_SAT\_0x3F00}{R5\_SAT\_0x3F00}}
+{\footnotesize\ttfamily \#define R5\+\_\+\+S\+A\+T\+\_\+0x3\+F00~0x\+FF}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ab0ea6874bcc910239b098025c9761c01}\label{sms_2hardware_8h_ab0ea6874bcc910239b098025c9761c01}}
+\index{hardware.h@{hardware.h}!R5\_SAT\_MASK@{R5\_SAT\_MASK}}
+\index{R5\_SAT\_MASK@{R5\_SAT\_MASK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R5\_SAT\_MASK}{R5\_SAT\_MASK}}
+{\footnotesize\ttfamily \#define R5\+\_\+\+S\+A\+T\+\_\+\+M\+A\+SK~0b10000001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a81ae7462829d0fcc65c3c99194a68772}\label{sms_2hardware_8h_a81ae7462829d0fcc65c3c99194a68772}}
+\index{hardware.h@{hardware.h}!VDP\_R6@{VDP\_R6}}
+\index{VDP\_R6@{VDP\_R6}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R6}{VDP\_R6}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R6~0b10000110}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a1aba84d3beebe43e641766525630d0ad}\label{sms_2hardware_8h_a1aba84d3beebe43e641766525630d0ad}}
+\index{hardware.h@{hardware.h}!R6\_BANK0@{R6\_BANK0}}
+\index{R6\_BANK0@{R6\_BANK0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R6\_BANK0}{R6\_BANK0}}
+{\footnotesize\ttfamily \#define R6\+\_\+\+B\+A\+N\+K0~0x\+FB}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a81289f179bb00ade9e4f7221ddff0e46}\label{sms_2hardware_8h_a81289f179bb00ade9e4f7221ddff0e46}}
+\index{hardware.h@{hardware.h}!R6\_DATA\_0x0000@{R6\_DATA\_0x0000}}
+\index{R6\_DATA\_0x0000@{R6\_DATA\_0x0000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R6\_DATA\_0x0000}{R6\_DATA\_0x0000}}
+{\footnotesize\ttfamily \#define R6\+\_\+\+D\+A\+T\+A\+\_\+0x0000~0x\+FB}
+
+\mbox{\Hypertarget{sms_2hardware_8h_adcc51095e67b158df848367761d735a4}\label{sms_2hardware_8h_adcc51095e67b158df848367761d735a4}}
+\index{hardware.h@{hardware.h}!R6\_BANK1@{R6\_BANK1}}
+\index{R6\_BANK1@{R6\_BANK1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R6\_BANK1}{R6\_BANK1}}
+{\footnotesize\ttfamily \#define R6\+\_\+\+B\+A\+N\+K1~0x\+FF}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ac59ac38e5ec2e23e511f854403d7cbe4}\label{sms_2hardware_8h_ac59ac38e5ec2e23e511f854403d7cbe4}}
+\index{hardware.h@{hardware.h}!R6\_DATA\_0x2000@{R6\_DATA\_0x2000}}
+\index{R6\_DATA\_0x2000@{R6\_DATA\_0x2000}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R6\_DATA\_0x2000}{R6\_DATA\_0x2000}}
+{\footnotesize\ttfamily \#define R6\+\_\+\+D\+A\+T\+A\+\_\+0x2000~0x\+FF}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aa82ab1c04cff3363327f3309d09ae638}\label{sms_2hardware_8h_aa82ab1c04cff3363327f3309d09ae638}}
+\index{hardware.h@{hardware.h}!VDP\_R7@{VDP\_R7}}
+\index{VDP\_R7@{VDP\_R7}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R7}{VDP\_R7}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R7~0b10000111}
+
+\mbox{\Hypertarget{sms_2hardware_8h_abef00e3cae6f12d97973b318ebbf9737}\label{sms_2hardware_8h_abef00e3cae6f12d97973b318ebbf9737}}
+\index{hardware.h@{hardware.h}!VDP\_RBORDER@{VDP\_RBORDER}}
+\index{VDP\_RBORDER@{VDP\_RBORDER}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_RBORDER}{VDP\_RBORDER}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R\+B\+O\+R\+D\+ER~0b10000111}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aa1a024a7dc26ef40663fe283565bcf50}\label{sms_2hardware_8h_aa1a024a7dc26ef40663fe283565bcf50}}
+\index{hardware.h@{hardware.h}!R7\_COLOR\_MASK@{R7\_COLOR\_MASK}}
+\index{R7\_COLOR\_MASK@{R7\_COLOR\_MASK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R7\_COLOR\_MASK}{R7\_COLOR\_MASK}}
+{\footnotesize\ttfamily \#define R7\+\_\+\+C\+O\+L\+O\+R\+\_\+\+M\+A\+SK~0b11110000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a3cb38487469808e023fcb331c180c4b9}\label{sms_2hardware_8h_a3cb38487469808e023fcb331c180c4b9}}
+\index{hardware.h@{hardware.h}!VDP\_R8@{VDP\_R8}}
+\index{VDP\_R8@{VDP\_R8}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R8}{VDP\_R8}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R8~0b10001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a9c49833bc96a70b8972027d28c816d2f}\label{sms_2hardware_8h_a9c49833bc96a70b8972027d28c816d2f}}
+\index{hardware.h@{hardware.h}!VDP\_RSCX@{VDP\_RSCX}}
+\index{VDP\_RSCX@{VDP\_RSCX}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_RSCX}{VDP\_RSCX}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R\+S\+CX~0b10001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a294388f3d14b6fec1f1bbeafc7d0f91e}\label{sms_2hardware_8h_a294388f3d14b6fec1f1bbeafc7d0f91e}}
+\index{hardware.h@{hardware.h}!VDP\_R9@{VDP\_R9}}
+\index{VDP\_R9@{VDP\_R9}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R9}{VDP\_R9}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R9~0b10001001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a3cce162b45d638126c478c5b6f7bcbc7}\label{sms_2hardware_8h_a3cce162b45d638126c478c5b6f7bcbc7}}
+\index{hardware.h@{hardware.h}!VDP\_RSCY@{VDP\_RSCY}}
+\index{VDP\_RSCY@{VDP\_RSCY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_RSCY}{VDP\_RSCY}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R\+S\+CY~0b10001001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a1049d2a3f634380f4dffff619334a504}\label{sms_2hardware_8h_a1049d2a3f634380f4dffff619334a504}}
+\index{hardware.h@{hardware.h}!VDP\_R10@{VDP\_R10}}
+\index{VDP\_R10@{VDP\_R10}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_R10}{VDP\_R10}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+R10~0b10001010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a98d635ed568cfe9f853eaf7e1707dec4}\label{sms_2hardware_8h_a98d635ed568cfe9f853eaf7e1707dec4}}
+\index{hardware.h@{hardware.h}!R10\_INT\_OFF@{R10\_INT\_OFF}}
+\index{R10\_INT\_OFF@{R10\_INT\_OFF}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R10\_INT\_OFF}{R10\_INT\_OFF}}
+{\footnotesize\ttfamily \#define R10\+\_\+\+I\+N\+T\+\_\+\+O\+FF~0x\+FF}
+
+\mbox{\Hypertarget{sms_2hardware_8h_adf9e7ec5362058df23e1c0e4c06ad5d6}\label{sms_2hardware_8h_adf9e7ec5362058df23e1c0e4c06ad5d6}}
+\index{hardware.h@{hardware.h}!R10\_INT\_EVERY@{R10\_INT\_EVERY}}
+\index{R10\_INT\_EVERY@{R10\_INT\_EVERY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{R10\_INT\_EVERY}{R10\_INT\_EVERY}}
+{\footnotesize\ttfamily \#define R10\+\_\+\+I\+N\+T\+\_\+\+E\+V\+E\+RY~0x00}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a086bde6bcc92e5f4d3e9ae45f0de475e}\label{sms_2hardware_8h_a086bde6bcc92e5f4d3e9ae45f0de475e}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_UP@{JOY\_P1\_UP}}
+\index{JOY\_P1\_UP@{JOY\_P1\_UP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_UP}{JOY\_P1\_UP}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+UP~0b00000001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ab4dd6ee624c6d9e5fe5820ce925ffb20}\label{sms_2hardware_8h_ab4dd6ee624c6d9e5fe5820ce925ffb20}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_DOWN@{JOY\_P1\_DOWN}}
+\index{JOY\_P1\_DOWN@{JOY\_P1\_DOWN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_DOWN}{JOY\_P1\_DOWN}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+D\+O\+WN~0b00000010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a7d709160cbd7b369109bf40161ae8ccd}\label{sms_2hardware_8h_a7d709160cbd7b369109bf40161ae8ccd}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_LEFT@{JOY\_P1\_LEFT}}
+\index{JOY\_P1\_LEFT@{JOY\_P1\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_LEFT}{JOY\_P1\_LEFT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+L\+E\+FT~0b00000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a1efece9134651ad4d2bd1836c1d1d6d6}\label{sms_2hardware_8h_a1efece9134651ad4d2bd1836c1d1d6d6}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_RIGHT@{JOY\_P1\_RIGHT}}
+\index{JOY\_P1\_RIGHT@{JOY\_P1\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_RIGHT}{JOY\_P1\_RIGHT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+R\+I\+G\+HT~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_aacc8667a6d5d9683ed4876e52aba2d33}\label{sms_2hardware_8h_aacc8667a6d5d9683ed4876e52aba2d33}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_SW1@{JOY\_P1\_SW1}}
+\index{JOY\_P1\_SW1@{JOY\_P1\_SW1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_SW1}{JOY\_P1\_SW1}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+S\+W1~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af29f72f4cc7c94deae5fb9c29b1cc94f}\label{sms_2hardware_8h_af29f72f4cc7c94deae5fb9c29b1cc94f}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_TRIGGER@{JOY\_P1\_TRIGGER}}
+\index{JOY\_P1\_TRIGGER@{JOY\_P1\_TRIGGER}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_TRIGGER}{JOY\_P1\_TRIGGER}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+T\+R\+I\+G\+G\+ER~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a9ab9954d0c66751a154f7824e344806b}\label{sms_2hardware_8h_a9ab9954d0c66751a154f7824e344806b}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_SW2@{JOY\_P1\_SW2}}
+\index{JOY\_P1\_SW2@{JOY\_P1\_SW2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_SW2}{JOY\_P1\_SW2}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+S\+W2~0b00100000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a307ba8e12d9273a99aa4830c5e0a3c88}\label{sms_2hardware_8h_a307ba8e12d9273a99aa4830c5e0a3c88}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_UP@{JOY\_P2\_UP}}
+\index{JOY\_P2\_UP@{JOY\_P2\_UP}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_UP}{JOY\_P2\_UP}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+UP~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a6d4129d670d421656f5e9a1f4b68a7f4}\label{sms_2hardware_8h_a6d4129d670d421656f5e9a1f4b68a7f4}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_DOWN@{JOY\_P2\_DOWN}}
+\index{JOY\_P2\_DOWN@{JOY\_P2\_DOWN}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_DOWN}{JOY\_P2\_DOWN}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+D\+O\+WN~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a2121cb75e0d570b0f92c7630bc1af25f}\label{sms_2hardware_8h_a2121cb75e0d570b0f92c7630bc1af25f}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_LEFT@{JOY\_P2\_LEFT}}
+\index{JOY\_P2\_LEFT@{JOY\_P2\_LEFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_LEFT}{JOY\_P2\_LEFT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+L\+E\+FT~0b00000001}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a16dac3d386b8bc0da50c6c814952472d}\label{sms_2hardware_8h_a16dac3d386b8bc0da50c6c814952472d}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_RIGHT@{JOY\_P2\_RIGHT}}
+\index{JOY\_P2\_RIGHT@{JOY\_P2\_RIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_RIGHT}{JOY\_P2\_RIGHT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+R\+I\+G\+HT~0b00000010}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a942e3ecdef267100c84a36f6e0dc0b51}\label{sms_2hardware_8h_a942e3ecdef267100c84a36f6e0dc0b51}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_SW1@{JOY\_P2\_SW1}}
+\index{JOY\_P2\_SW1@{JOY\_P2\_SW1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_SW1}{JOY\_P2\_SW1}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+S\+W1~0b00000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_afe5ec4ca4d413ae5388be131d9c4f93b}\label{sms_2hardware_8h_afe5ec4ca4d413ae5388be131d9c4f93b}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_TRIGGER@{JOY\_P2\_TRIGGER}}
+\index{JOY\_P2\_TRIGGER@{JOY\_P2\_TRIGGER}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_TRIGGER}{JOY\_P2\_TRIGGER}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+T\+R\+I\+G\+G\+ER~0b00000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a6d181ce63ff84bd559d13f4423a336b3}\label{sms_2hardware_8h_a6d181ce63ff84bd559d13f4423a336b3}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_SW2@{JOY\_P2\_SW2}}
+\index{JOY\_P2\_SW2@{JOY\_P2\_SW2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_SW2}{JOY\_P2\_SW2}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+S\+W2~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a5b3dff084cbb77646a337d94d16a1714}\label{sms_2hardware_8h_a5b3dff084cbb77646a337d94d16a1714}}
+\index{hardware.h@{hardware.h}!JOY\_RESET@{JOY\_RESET}}
+\index{JOY\_RESET@{JOY\_RESET}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_RESET}{JOY\_RESET}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+R\+E\+S\+ET~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a772c8def7b33ad4fd3cbfc74d84441de}\label{sms_2hardware_8h_a772c8def7b33ad4fd3cbfc74d84441de}}
+\index{hardware.h@{hardware.h}!JOY\_P1\_LIGHT@{JOY\_P1\_LIGHT}}
+\index{JOY\_P1\_LIGHT@{JOY\_P1\_LIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P1\_LIGHT}{JOY\_P1\_LIGHT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P1\+\_\+\+L\+I\+G\+HT~0b01000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a42ded04442bd4fb4acf5333b248423fa}\label{sms_2hardware_8h_a42ded04442bd4fb4acf5333b248423fa}}
+\index{hardware.h@{hardware.h}!JOY\_P2\_LIGHT@{JOY\_P2\_LIGHT}}
+\index{JOY\_P2\_LIGHT@{JOY\_P2\_LIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{JOY\_P2\_LIGHT}{JOY\_P2\_LIGHT}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+P2\+\_\+\+L\+I\+G\+HT~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a8f4dbe8a2e6389c78b9f6fb9a3ff1dca}\label{sms_2hardware_8h_a8f4dbe8a2e6389c78b9f6fb9a3ff1dca}}
+\index{hardware.h@{hardware.h}!RAMCTL\_BANK@{RAMCTL\_BANK}}
+\index{RAMCTL\_BANK@{RAMCTL\_BANK}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RAMCTL\_BANK}{RAMCTL\_BANK}}
+{\footnotesize\ttfamily \#define R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+NK~0b00000100}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a0167c8f86de8ef1a327b806c8ed0c64c}\label{sms_2hardware_8h_a0167c8f86de8ef1a327b806c8ed0c64c}}
+\index{hardware.h@{hardware.h}!RAMCTL\_ROM@{RAMCTL\_ROM}}
+\index{RAMCTL\_ROM@{RAMCTL\_ROM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RAMCTL\_ROM}{RAMCTL\_ROM}}
+{\footnotesize\ttfamily \#define R\+A\+M\+C\+T\+L\+\_\+\+R\+OM~0b00000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}\label{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}}
+\index{hardware.h@{hardware.h}!RAMCTL\_RAM@{RAMCTL\_RAM}}
+\index{RAMCTL\_RAM@{RAMCTL\_RAM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RAMCTL\_RAM}{RAMCTL\_RAM}}
+{\footnotesize\ttfamily \#define R\+A\+M\+C\+T\+L\+\_\+\+R\+AM~0b00001000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_afa9ebb221cf9cd92038131ab588679bf}\label{sms_2hardware_8h_afa9ebb221cf9cd92038131ab588679bf}}
+\index{hardware.h@{hardware.h}!RAMCTL\_RO@{RAMCTL\_RO}}
+\index{RAMCTL\_RO@{RAMCTL\_RO}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RAMCTL\_RO}{RAMCTL\_RO}}
+{\footnotesize\ttfamily \#define R\+A\+M\+C\+T\+L\+\_\+\+RO~0b00010000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a97eb5adb5f29e17ce5766728447317f5}\label{sms_2hardware_8h_a97eb5adb5f29e17ce5766728447317f5}}
+\index{hardware.h@{hardware.h}!RAMCTL\_PROT@{RAMCTL\_PROT}}
+\index{RAMCTL\_PROT@{RAMCTL\_PROT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{RAMCTL\_PROT}{RAMCTL\_PROT}}
+{\footnotesize\ttfamily \#define R\+A\+M\+C\+T\+L\+\_\+\+P\+R\+OT~0b10000000}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a1ac4bf5582e0754ea814c3f51c99a91a}\label{sms_2hardware_8h_a1ac4bf5582e0754ea814c3f51c99a91a}}
+\index{hardware.h@{hardware.h}!SYSTEM\_PAL@{SYSTEM\_PAL}}
+\index{SYSTEM\_PAL@{SYSTEM\_PAL}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SYSTEM\_PAL}{SYSTEM\_PAL}}
+{\footnotesize\ttfamily \#define S\+Y\+S\+T\+E\+M\+\_\+\+P\+AL~0x00}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ae6888157a94fca2f1a1b5136494f2e07}\label{sms_2hardware_8h_ae6888157a94fca2f1a1b5136494f2e07}}
+\index{hardware.h@{hardware.h}!SYSTEM\_NTSC@{SYSTEM\_NTSC}}
+\index{SYSTEM\_NTSC@{SYSTEM\_NTSC}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{SYSTEM\_NTSC}{SYSTEM\_NTSC}}
+{\footnotesize\ttfamily \#define S\+Y\+S\+T\+E\+M\+\_\+\+N\+T\+SC~0x01}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ad3b833661b103edc2648258dd741c92c}\label{sms_2hardware_8h_ad3b833661b103edc2648258dd741c92c}}
+\index{hardware.h@{hardware.h}!VDP\_SAT\_TERM@{VDP\_SAT\_TERM}}
+\index{VDP\_SAT\_TERM@{VDP\_SAT\_TERM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_SAT\_TERM}{VDP\_SAT\_TERM}}
+{\footnotesize\ttfamily \#define V\+D\+P\+\_\+\+S\+A\+T\+\_\+\+T\+E\+RM~0x\+D0}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}\label{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_PX\_WIDTH@{DEVICE\_SCREEN\_PX\_WIDTH}}
+\index{DEVICE\_SCREEN\_PX\_WIDTH@{DEVICE\_SCREEN\_PX\_WIDTH}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_PX\_WIDTH}{DEVICE\_SCREEN\_PX\_WIDTH}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH~(\mbox{\hyperlink{gb_2hardware_8h_add7f32ba868ef6517798f5fce337e4b2}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+W\+I\+D\+TH}} $\ast$ 8)}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}\label{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}}
+\index{hardware.h@{hardware.h}!DEVICE\_SCREEN\_PX\_HEIGHT@{DEVICE\_SCREEN\_PX\_HEIGHT}}
+\index{DEVICE\_SCREEN\_PX\_HEIGHT@{DEVICE\_SCREEN\_PX\_HEIGHT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SCREEN\_PX\_HEIGHT}{DEVICE\_SCREEN\_PX\_HEIGHT}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT~(\mbox{\hyperlink{gb_2hardware_8h_ad252264fdcf900e5fbf611f7a45962ed}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+H\+E\+I\+G\+HT}} $\ast$ 8)}
+
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{sms_2hardware_8h_aa80cb68338819c004095531d32b70e38}\label{sms_2hardware_8h_aa80cb68338819c004095531d32b70e38}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R0@{shadow\_VDP\_R0}}
+\index{shadow\_VDP\_R0@{shadow\_VDP\_R0}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R0}{shadow\_VDP\_R0}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R0\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a542cb696f242df44b0d8e9225d532ef4}\label{sms_2hardware_8h_a542cb696f242df44b0d8e9225d532ef4}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R1@{shadow\_VDP\_R1}}
+\index{shadow\_VDP\_R1@{shadow\_VDP\_R1}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R1}{shadow\_VDP\_R1}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R1\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a7f7fa2c0e33c6d515332a50c2acb54e7}\label{sms_2hardware_8h_a7f7fa2c0e33c6d515332a50c2acb54e7}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R2@{shadow\_VDP\_R2}}
+\index{shadow\_VDP\_R2@{shadow\_VDP\_R2}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R2}{shadow\_VDP\_R2}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R2\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_ab984056ff9eb011fbd84abdafb3a8bce}\label{sms_2hardware_8h_ab984056ff9eb011fbd84abdafb3a8bce}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R3@{shadow\_VDP\_R3}}
+\index{shadow\_VDP\_R3@{shadow\_VDP\_R3}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R3}{shadow\_VDP\_R3}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R3\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af9a30a728fedbe7e4c660c448c262e2c}\label{sms_2hardware_8h_af9a30a728fedbe7e4c660c448c262e2c}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R4@{shadow\_VDP\_R4}}
+\index{shadow\_VDP\_R4@{shadow\_VDP\_R4}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R4}{shadow\_VDP\_R4}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R4\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a221db76cb39200a948234330ed309af7}\label{sms_2hardware_8h_a221db76cb39200a948234330ed309af7}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R5@{shadow\_VDP\_R5}}
+\index{shadow\_VDP\_R5@{shadow\_VDP\_R5}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R5}{shadow\_VDP\_R5}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R5\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a8afbdaaf8c6dee4e7482a341351344b4}\label{sms_2hardware_8h_a8afbdaaf8c6dee4e7482a341351344b4}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R6@{shadow\_VDP\_R6}}
+\index{shadow\_VDP\_R6@{shadow\_VDP\_R6}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R6}{shadow\_VDP\_R6}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R6\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a33b3e7c120a579cb729caf588ba1d9a8}\label{sms_2hardware_8h_a33b3e7c120a579cb729caf588ba1d9a8}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R7@{shadow\_VDP\_R7}}
+\index{shadow\_VDP\_R7@{shadow\_VDP\_R7}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R7}{shadow\_VDP\_R7}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R7\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a20a977182f6f5f60ee6464e15f05aed0}\label{sms_2hardware_8h_a20a977182f6f5f60ee6464e15f05aed0}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_RBORDER@{shadow\_VDP\_RBORDER}}
+\index{shadow\_VDP\_RBORDER@{shadow\_VDP\_RBORDER}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_RBORDER}{shadow\_VDP\_RBORDER}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R\+B\+O\+R\+D\+ER\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_add65b8e5f0b806e563ce27de7348ba31}\label{sms_2hardware_8h_add65b8e5f0b806e563ce27de7348ba31}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R8@{shadow\_VDP\_R8}}
+\index{shadow\_VDP\_R8@{shadow\_VDP\_R8}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R8}{shadow\_VDP\_R8}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R8\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af6a84b0288b045560f83a1944a8c1c3b}\label{sms_2hardware_8h_af6a84b0288b045560f83a1944a8c1c3b}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_RSCX@{shadow\_VDP\_RSCX}}
+\index{shadow\_VDP\_RSCX@{shadow\_VDP\_RSCX}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_RSCX}{shadow\_VDP\_RSCX}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R\+S\+CX\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a1ccce1e3f8acb76170fb752ee40ae659}\label{sms_2hardware_8h_a1ccce1e3f8acb76170fb752ee40ae659}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R9@{shadow\_VDP\_R9}}
+\index{shadow\_VDP\_R9@{shadow\_VDP\_R9}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R9}{shadow\_VDP\_R9}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R9\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a292b59055beb22b566b39462da3b7eba}\label{sms_2hardware_8h_a292b59055beb22b566b39462da3b7eba}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_RSCY@{shadow\_VDP\_RSCY}}
+\index{shadow\_VDP\_RSCY@{shadow\_VDP\_RSCY}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_RSCY}{shadow\_VDP\_RSCY}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R\+S\+CY\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_af310a900e3b4b5b5032f4ffd6fa309b0}\label{sms_2hardware_8h_af310a900e3b4b5b5032f4ffd6fa309b0}}
+\index{hardware.h@{hardware.h}!shadow\_VDP\_R10@{shadow\_VDP\_R10}}
+\index{shadow\_VDP\_R10@{shadow\_VDP\_R10}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{shadow\_VDP\_R10}{shadow\_VDP\_R10}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} shadow\+\_\+\+V\+D\+P\+\_\+\+R10\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a735fc9fb4f089391a584293f2dff1008}\label{sms_2hardware_8h_a735fc9fb4f089391a584293f2dff1008}}
+\index{hardware.h@{hardware.h}!\_BIOS@{\_BIOS}}
+\index{\_BIOS@{\_BIOS}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_BIOS}{\_BIOS}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \+\_\+\+B\+I\+OS\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a7093bf38c5e663715f4efed44341502d}\label{sms_2hardware_8h_a7093bf38c5e663715f4efed44341502d}}
+\index{hardware.h@{hardware.h}!\_SYSTEM@{\_SYSTEM}}
+\index{\_SYSTEM@{\_SYSTEM}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{\_SYSTEM}{\_SYSTEM}}
+{\footnotesize\ttfamily const \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \+\_\+\+S\+Y\+S\+T\+EM\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2hardware_8h_a019bf78a6d586c987aec03af8d20e02f}\label{sms_2hardware_8h_a019bf78a6d586c987aec03af8d20e02f}}
+\index{hardware.h@{hardware.h}!VDP\_ATTR\_SHIFT@{VDP\_ATTR\_SHIFT}}
+\index{VDP\_ATTR\_SHIFT@{VDP\_ATTR\_SHIFT}!hardware.h@{hardware.h}}
+\doxyparagraph{\texorpdfstring{VDP\_ATTR\_SHIFT}{VDP\_ATTR\_SHIFT}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} V\+D\+P\+\_\+\+A\+T\+T\+R\+\_\+\+S\+H\+I\+FT\hspace{0.3cm}{\ttfamily [extern]}}
+
diff --git a/docs/latex/sms_2metasprites_8h.tex b/docs/latex/sms_2metasprites_8h.tex
new file mode 100644
index 00000000..b962daf8
--- /dev/null
+++ b/docs/latex/sms_2metasprites_8h.tex
@@ -0,0 +1,185 @@
+\hypertarget{sms_2metasprites_8h}{}\doxysubsection{sms/metasprites.h File Reference}
+\label{sms_2metasprites_8h}\index{sms/metasprites.h@{sms/metasprites.h}}
+{\ttfamily \#include $<$sms/hardware.\+h$>$}\newline
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}~-\/128
+\item
+\#define \mbox{\hyperlink{sms_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}{M\+E\+T\+A\+S\+P\+R\+\_\+\+I\+T\+EM}}(dy, dx, dt, a)~\{(dy),(dx),(dt)\}
+\item
+\#define \mbox{\hyperlink{sms_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}{M\+E\+T\+A\+S\+P\+R\+\_\+\+T\+E\+RM}}~\{\mbox{\hyperlink{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}\}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} \mbox{\hyperlink{sms_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}{metasprite\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{sms_2metasprites_8h_a0c668f442b4764275a1dade597a59e20}{hide\+\_\+sprites\+\_\+range}} (\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} from, \mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}} to) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}{move\+\_\+metasprite}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{sms_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}{hide\+\_\+metasprite}} (const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$metasprite, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+sprite)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+const void $\ast$ \mbox{\hyperlink{sms_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}{\+\_\+\+\_\+current\+\_\+metasprite}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_2metasprites_8h_a345fa52509387bd18a4092178a18286f}{\+\_\+\+\_\+current\+\_\+base\+\_\+tile}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}{\+\_\+\+\_\+render\+\_\+shadow\+\_\+\+O\+AM}}
+\item
+static \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_2metasprites_8h_af279c752a3b15c4bd5c67f54b92e553f}{iyl}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+\hypertarget{sms_2metasprites_8h_autotoc_md4}{}\doxysubsubsection{Metasprite support}\label{sms_2metasprites_8h_autotoc_md4}
+A metasprite is a larger sprite made up from a collection of smaller individual hardware sprites. Different frames of the same metasprites can share tile data.
+
+The api supports metasprites in both \mbox{\hyperlink{sms_8h_aa87bec0d134136fdb727f52cb773b792}{S\+P\+R\+I\+T\+E\+S\+\_\+8x8}} and \mbox{\hyperlink{sms_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}} mode. If 8x16 mode is used then the height of the metasprite must be a multiple of 16.
+
+The origin (pivot) for the metasprite is not required to be in the upper left-\/hand corner as with regular hardware sprites.
+
+Use the \mbox{\hyperlink{docs_toolchain_utility_png2asset}{utility\+\_\+png2asset}} tool to convert single or multiple frames of graphics into metasprite structured data for use with the ...metasprite...() functions.\hypertarget{sms_2metasprites_8h_autotoc_md5}{}\doxysubsubsection{Metasprites composed of variable numbers of sprites}\label{sms_2metasprites_8h_autotoc_md5}
+When using png2asset, it\textquotesingle{}s common for the output of different frames to be composed of different numbers of hardware sprites (since it\textquotesingle{}s trying to create each frame as efficiently as possible). Due to that, it\textquotesingle{}s good practice to clear out (hide) unused sprites in the shadow\+\_\+\+O\+AM that have been set by previous frames.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}\label{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}}
+\index{metasprites.h@{metasprites.h}!metasprite\_end@{metasprite\_end}}
+\index{metasprite\_end@{metasprite\_end}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{metasprite\_end}{metasprite\_end}}
+{\footnotesize\ttfamily \#define metasprite\+\_\+end~-\/128}
+
+\mbox{\Hypertarget{sms_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}\label{sms_2metasprites_8h_aa88dc4d5e35045509b8955a4a23a30aa}}
+\index{metasprites.h@{metasprites.h}!METASPR\_ITEM@{METASPR\_ITEM}}
+\index{METASPR\_ITEM@{METASPR\_ITEM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{METASPR\_ITEM}{METASPR\_ITEM}}
+{\footnotesize\ttfamily \#define M\+E\+T\+A\+S\+P\+R\+\_\+\+I\+T\+EM(\begin{DoxyParamCaption}\item[{}]{dy, }\item[{}]{dx, }\item[{}]{dt, }\item[{}]{a }\end{DoxyParamCaption})~\{(dy),(dx),(dt)\}}
+
+\mbox{\Hypertarget{sms_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}\label{sms_2metasprites_8h_aa1d425dcce3cd104751744535b6a389a}}
+\index{metasprites.h@{metasprites.h}!METASPR\_TERM@{METASPR\_TERM}}
+\index{METASPR\_TERM@{METASPR\_TERM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{METASPR\_TERM}{METASPR\_TERM}}
+{\footnotesize\ttfamily \#define M\+E\+T\+A\+S\+P\+R\+\_\+\+T\+E\+RM~\{\mbox{\hyperlink{sms_2metasprites_8h_a9f9f390a57460914e27c7604b7d8379a}{metasprite\+\_\+end}}\}}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{sms_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}\label{sms_2metasprites_8h_aba6401cc8173158a9f37ee22094c03d3}}
+\index{metasprites.h@{metasprites.h}!metasprite\_t@{metasprite\_t}}
+\index{metasprite\_t@{metasprite\_t}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{metasprite\_t}{metasprite\_t}}
+{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}}}
+
+Metasprite sub-\/item structure
+\begin{DoxyParams}{Parameters}
+{\em dy} & (int8\+\_\+t) Y coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dx} & (int8\+\_\+t) X coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dtile} & (uint8\+\_\+t) Start tile relative to the metasprites own set of tiles\\
+\hline
+\end{DoxyParams}
+Metasprites are built from multiple \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (one for each sub-\/sprite) and a pool of tiles they reference. If a metasprite has multiple frames then each frame will be built from some number of \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (which may vary based on how many sprites are required for that particular frame).
+
+A metasprite frame is terminated with a \{metasprite\+\_\+end\} entry.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{sms_2metasprites_8h_a0c668f442b4764275a1dade597a59e20}\label{sms_2metasprites_8h_a0c668f442b4764275a1dade597a59e20}}
+\index{metasprites.h@{metasprites.h}!hide\_sprites\_range@{hide\_sprites\_range}}
+\index{hide\_sprites\_range@{hide\_sprites\_range}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{hide\_sprites\_range()}{hide\_sprites\_range()}}
+{\footnotesize\ttfamily void hide\+\_\+sprites\+\_\+range (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}]{from, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_ab27e9918b538ce9d8ca692479b375b6a}{U\+I\+N\+T8}}}]{to }\end{DoxyParamCaption})}
+
+Hides all hardware sprites in range from $<$= X $<$ to
+\begin{DoxyParams}{Parameters}
+{\em from} & start O\+AM index \\
+\hline
+{\em to} & finish O\+AM index \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}\label{sms_2metasprites_8h_a77475e913bf0a19df28bdbf9d1cf392b}}
+\index{metasprites.h@{metasprites.h}!move\_metasprite@{move\_metasprite}}
+\index{move\_metasprite@{move\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{move\_metasprite()}{move\_metasprite()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} move\+\_\+metasprite (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves metasprite to the absolute position x and y
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to the first struct of the metasprite (for the desired frame) \\
+\hline
+{\em base\+\_\+tile} & Number of the first tile where the metasprite\textquotesingle{}s tiles start \\
+\hline
+{\em base\+\_\+sprite} & Number of the first hardware sprite to be used by the metasprite ~\newline
+ \\
+\hline
+{\em x} & Absolute x coordinate of the sprite \\
+\hline
+{\em y} & Absolute y coordinate of the sprite\\
+\hline
+\end{DoxyParams}
+Moves {\bfseries{metasprite}} to the absolute position {\bfseries{x}} and {\bfseries{y}} (with {\bfseries{no flip}} on the X or Y axis). Hardware sprites are allocated starting from {\bfseries{base\+\_\+sprite}}, using tiles starting from {\bfseries{base\+\_\+tile}}.
+
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \item \+\_\+\+\_\+current\+\_\+base\+\_\+tile = base\+\_\+tile;\end{DoxyItemize}
+\begin{DoxyReturn}{Returns}
+Number of hardware sprites used to draw this metasprite
+\end{DoxyReturn}
+\mbox{\Hypertarget{sms_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}\label{sms_2metasprites_8h_af8de5a888d65448b9d34027a0e1ce906}}
+\index{metasprites.h@{metasprites.h}!hide\_metasprite@{hide\_metasprite}}
+\index{hide\_metasprite@{hide\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{hide\_metasprite()}{hide\_metasprite()}}
+{\footnotesize\ttfamily void hide\+\_\+metasprite (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} $\ast$}]{metasprite, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+sprite }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Hides a metasprite from the screen
+
+
+\begin{DoxyParams}{Parameters}
+{\em metasprite} & Pointer to first struct of the desired metasprite frame \\
+\hline
+{\em base\+\_\+sprite} & Number of hardware sprite to start with\\
+\hline
+\end{DoxyParams}
+Sets\+: \begin{DoxyItemize}
+\item \+\_\+\+\_\+current\+\_\+metasprite = metasprite; \end{DoxyItemize}
+
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{sms_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}\label{sms_2metasprites_8h_aae51f066cc5436457f62351847bfc64b}}
+\index{metasprites.h@{metasprites.h}!\_\_current\_metasprite@{\_\_current\_metasprite}}
+\index{\_\_current\_metasprite@{\_\_current\_metasprite}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_current\_metasprite}{\_\_current\_metasprite}}
+{\footnotesize\ttfamily const void$\ast$ \+\_\+\+\_\+current\+\_\+metasprite\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2metasprites_8h_a345fa52509387bd18a4092178a18286f}\label{sms_2metasprites_8h_a345fa52509387bd18a4092178a18286f}}
+\index{metasprites.h@{metasprites.h}!\_\_current\_base\_tile@{\_\_current\_base\_tile}}
+\index{\_\_current\_base\_tile@{\_\_current\_base\_tile}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_current\_base\_tile}{\_\_current\_base\_tile}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+\+\_\+current\+\_\+base\+\_\+tile\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}\label{sms_2metasprites_8h_a4bfe4d95031b67951cf6bc342110db39}}
+\index{metasprites.h@{metasprites.h}!\_\_render\_shadow\_OAM@{\_\_render\_shadow\_OAM}}
+\index{\_\_render\_shadow\_OAM@{\_\_render\_shadow\_OAM}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{\_\_render\_shadow\_OAM}{\_\_render\_shadow\_OAM}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+\+\_\+render\+\_\+shadow\+\_\+\+O\+AM\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_2metasprites_8h_af279c752a3b15c4bd5c67f54b92e553f}\label{sms_2metasprites_8h_af279c752a3b15c4bd5c67f54b92e553f}}
+\index{metasprites.h@{metasprites.h}!iyl@{iyl}}
+\index{iyl@{iyl}!metasprites.h@{metasprites.h}}
+\doxyparagraph{\texorpdfstring{iyl}{iyl}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} iyl}
+
diff --git a/docs/latex/sms_8h.tex b/docs/latex/sms_8h.tex
new file mode 100644
index 00000000..ac6bf2ba
--- /dev/null
+++ b/docs/latex/sms_8h.tex
@@ -0,0 +1,1666 @@
+\hypertarget{sms_8h}{}\doxysubsection{sms/sms.h File Reference}
+\label{sms_8h}\index{sms/sms.h@{sms/sms.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+{\ttfamily \#include $<$gbdk/version.\+h$>$}\newline
+{\ttfamily \#include $<$sms/hardware.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{sms_8h_a19e5fbd76b85bf708ec31d55905fc537}{S\+E\+GA}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a6bc34abf062d8e3be88170ac106f197f}{V\+B\+K\+\_\+\+R\+EG}}~\mbox{\hyperlink{sms_2hardware_8h_a019bf78a6d586c987aec03af8d20e02f}{V\+D\+P\+\_\+\+A\+T\+T\+R\+\_\+\+S\+H\+I\+FT}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a05ca817ab32f6da612c3ae26db5abf02}{J\+\_\+\+UP}}~0b00000001
+\item
+\#define \mbox{\hyperlink{sms_8h_ae032c5c544196e37ec0432f6cfad7904}{J\+\_\+\+D\+O\+WN}}~0b00000010
+\item
+\#define \mbox{\hyperlink{sms_8h_ac70894fecac30c1ca9917f07373cf81c}{J\+\_\+\+L\+E\+FT}}~0b00000100
+\item
+\#define \mbox{\hyperlink{sms_8h_a3bad91d11ae09ffcbb3cb0a81873d325}{J\+\_\+\+R\+I\+G\+HT}}~0b00001000
+\item
+\#define \mbox{\hyperlink{sms_8h_a31af766e3b598eb7a6b63f55a4988e7a}{J\+\_\+A}}~0b00010000
+\item
+\#define \mbox{\hyperlink{sms_8h_ae47e59a309120f9420993f26816b5e6d}{J\+\_\+B}}~0b00100000
+\item
+\#define \mbox{\hyperlink{sms_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}~0x02U
+\item
+\#define \mbox{\hyperlink{sms_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}~0x03U
+\item
+\#define \mbox{\hyperlink{sms_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}~0x04U
+\item
+\#define \mbox{\hyperlink{sms_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}~0x08U
+\item
+\#define \mbox{\hyperlink{sms_8h_ae97793b4039609f93b0f7f8bddb18011}{S\+\_\+\+F\+L\+I\+PX}}~0x02U
+\item
+\#define \mbox{\hyperlink{sms_8h_a4bbb9cd6c38b2317de5256d1d889c63b}{S\+\_\+\+F\+L\+I\+PY}}~0x04U
+\item
+\#define \mbox{\hyperlink{sms_8h_a54572cf6791463b6d60623837e0bb5a6}{S\+\_\+\+P\+A\+L\+E\+T\+TE}}~0x08U
+\item
+\#define \mbox{\hyperlink{sms_8h_a9506d04c2ec7d2442a52054f67d2b32f}{S\+\_\+\+P\+R\+I\+O\+R\+I\+TY}}~0x10U
+\item
+\#define \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(R\+EG, v)~shadow\+\_\+\#\#R\+EG=(v);\+\_\+\+\_\+critical\{V\+D\+P\+\_\+\+C\+MD=(shadow\+\_\+\#\#R\+EG),V\+D\+P\+\_\+\+C\+MD=R\+EG;\}
+\item
+\#define \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(R\+EG)~shadow\+\_\+\#\#R\+EG
+\item
+\#define \mbox{\hyperlink{sms_8h_aa027abe630d44039f238034bcb2d2f36}{E\+M\+P\+T\+Y\+\_\+\+I\+F\+L\+AG}}~0x00U
+\item
+\#define \mbox{\hyperlink{sms_8h_a2ca7720b9a5da9b2173e1f74dba85541}{V\+B\+L\+\_\+\+I\+F\+L\+AG}}~0x01U
+\item
+\#define \mbox{\hyperlink{sms_8h_a61a9e2910380de6abb34df14ef634eb4}{L\+C\+D\+\_\+\+I\+F\+L\+AG}}~0x02U
+\item
+\#define \mbox{\hyperlink{sms_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}~0x04U
+\item
+\#define \mbox{\hyperlink{sms_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}~0x08U
+\item
+\#define \mbox{\hyperlink{sms_8h_a2f829cf27d6e3e24c875e9b82dfcb280}{J\+O\+Y\+\_\+\+I\+F\+L\+AG}}~0x10U
+\item
+\#define \mbox{\hyperlink{sms_8h_ada0cc738d27aad251151e69cb8d250e1}{S\+C\+R\+E\+E\+N\+W\+I\+D\+TH}}~\mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}
+\item
+\#define \mbox{\hyperlink{sms_8h_ae189e98d0ef9263c37869ce1ff3710a5}{S\+C\+R\+E\+E\+N\+H\+E\+I\+G\+HT}}~\mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a5a796bbf3e4347d914b83568350143a9}{M\+I\+N\+W\+N\+D\+P\+O\+SX}}~0x00U
+\item
+\#define \mbox{\hyperlink{sms_8h_af3d632ba2d7cef6619df5dfea8730909}{M\+I\+N\+W\+N\+D\+P\+O\+SY}}~0x00U
+\item
+\#define \mbox{\hyperlink{sms_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}{M\+A\+X\+W\+N\+D\+P\+O\+SX}}~0x00U
+\item
+\#define \mbox{\hyperlink{sms_8h_ad57f2f8c54204687f02801d8ab1bd150}{M\+A\+X\+W\+N\+D\+P\+O\+SY}}~0x00U
+\item
+\#define \mbox{\hyperlink{sms_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_adbfdd7c42539613c371820dffd14906f}{R1\+\_\+\+D\+I\+S\+P\+\_\+\+ON}})
+\item
+\#define \mbox{\hyperlink{sms_8h_ad2ec9831813c5e7069917aa4455af682}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF}}~ \mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}();
+\item
+\#define \mbox{\hyperlink{sms_8h_a0659212acd317ccdebc0ecf435df330f}{H\+I\+D\+E\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}{R0\+\_\+\+L\+CB}})
+\item
+\#define \mbox{\hyperlink{sms_8h_a5497c2255a9474d397446710189eacbe}{S\+H\+O\+W\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}) \&= ($\sim$\mbox{\hyperlink{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}{R0\+\_\+\+L\+CB}}))
+\item
+\#define \mbox{\hyperlink{sms_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}{H\+I\+D\+E\+\_\+\+B\+KG}}
+\item
+\#define \mbox{\hyperlink{sms_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}
+\item
+\#define \mbox{\hyperlink{sms_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a495bc9f405f916f02ad5d97e6e730134}{S\+H\+O\+W\+\_\+\+S\+P\+R\+I\+T\+ES}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a69ef98aee664b8abd8d1a3d45f016dda}{H\+I\+D\+E\+\_\+\+S\+P\+R\+I\+T\+ES}}
+\item
+\#define \mbox{\hyperlink{sms_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}}~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}{R1\+\_\+\+S\+P\+R\+\_\+8\+X16}})
+\item
+\#define \mbox{\hyperlink{sms_8h_aa87bec0d134136fdb727f52cb773b792}{S\+P\+R\+I\+T\+E\+S\+\_\+8x8}}~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) \&= ($\sim$\mbox{\hyperlink{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}{R1\+\_\+\+S\+P\+R\+\_\+8\+X16}}))
+\item
+\#define \mbox{\hyperlink{sms_8h_a231ec05679809190782e61c6e8aaaba4}{D\+E\+V\+I\+C\+E\+\_\+\+S\+U\+P\+P\+O\+R\+T\+S\+\_\+\+C\+O\+L\+OR}}~(\mbox{\hyperlink{types_8h_aa8cecfc5c5c054d2875c03e77b7be15d}{T\+R\+UE}})
+\item
+\#define \mbox{\hyperlink{sms_8h_af0d15cf2a26924d2ef00ac4017e6b1d8}{\+\_\+current\+\_\+bank}}~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1
+\item
+\#define \mbox{\hyperlink{sms_8h_ae042588f20bf5a2349c8ad8716245233}{C\+U\+R\+R\+E\+N\+T\+\_\+\+B\+A\+NK}}~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1
+\item
+\#define \mbox{\hyperlink{sms_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+NK}}(V\+A\+R\+N\+A\+ME)~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )
+\item
+\#define \mbox{\hyperlink{sms_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+EF}}(V\+A\+R\+N\+A\+ME)
+\item
+\#define \mbox{\hyperlink{sms_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+RN}}(V\+A\+R\+N\+A\+ME)~extern const void \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME;
+\item
+\#define \mbox{\hyperlink{sms_8h_af61262bbc05629f31020afce67e1b9ea}{S\+W\+I\+T\+C\+H\+\_\+\+R\+OM}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1=(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{sms_8h_a86d47feb2b999aaabbba9f63f4bb3567}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M1}}~\mbox{\hyperlink{sms_8h_af61262bbc05629f31020afce67e1b9ea}{S\+W\+I\+T\+C\+H\+\_\+\+R\+OM}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a6d40a15ff27c2a1c8269d3dbe67eae65}{S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M2}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~M\+A\+P\+\_\+\+F\+R\+A\+M\+E2=(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})
+\item
+\#define \mbox{\hyperlink{sms_8h_a121feb0c32d124562f52398aa9656e7b}{S\+W\+I\+T\+C\+H\+\_\+\+R\+AM}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL=((\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})\&1)?R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL$\vert$R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+N\+K\+:\+R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL\&($\sim$\mbox{\hyperlink{sms_2hardware_8h_a8f4dbe8a2e6389c78b9f6fb9a3ff1dca}{R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+NK}})
+\item
+\#define \mbox{\hyperlink{sms_8h_a0e9c88657beaac946231a4801481b97f}{E\+N\+A\+B\+L\+E\+\_\+\+R\+AM}}~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL$\vert$=\mbox{\hyperlink{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}{R\+A\+M\+C\+T\+L\+\_\+\+R\+AM}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a649d27b5587de16a66176e03a1b8ebd5}{D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+AM}}~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL\&=($\sim$\mbox{\hyperlink{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}{R\+A\+M\+C\+T\+L\+\_\+\+R\+AM}})
+\item
+\#define \mbox{\hyperlink{sms_8h_a2215732f2ba2ec6406b65d3cca56a200}{set\+\_\+bkg\+\_\+palette\+\_\+entry}}~\mbox{\hyperlink{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}{set\+\_\+palette\+\_\+entry}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a8b5c17235a3f65af70492e109a25f237}{set\+\_\+sprite\+\_\+palette\+\_\+entry}}(palette, entry, rgb\+\_\+data)~\mbox{\hyperlink{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}{set\+\_\+palette\+\_\+entry}}(1,entry,rgb\+\_\+data)
+\item
+\#define \mbox{\hyperlink{sms_8h_a9f879bd31899f7989f887b6238de24e3}{set\+\_\+bkg\+\_\+palette}}~\mbox{\hyperlink{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}{set\+\_\+palette}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a7d5ed1aed79d8fd2894893d7f6f9b835}{set\+\_\+sprite\+\_\+palette}}(first\+\_\+palette, nb\+\_\+palettes, rgb\+\_\+data)~\mbox{\hyperlink{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}{set\+\_\+palette}}(1,1,rgb\+\_\+data)
+\item
+\#define \mbox{\hyperlink{sms_8h_a67f80e65620470b55a4950e2966eb868}{C\+O\+M\+P\+A\+T\+\_\+\+P\+A\+L\+E\+T\+TE}}(C0, C1, C2, C3)~(((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C3) $<$$<$ 12) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C2) $<$$<$ 8) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C1) $<$$<$ 4) $\vert$ (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C0))
+\item
+\#define \mbox{\hyperlink{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}{set\+\_\+bkg\+\_\+tiles}}~\mbox{\hyperlink{sms_8h_a7c38b146f77eda84981c06c2271fe116}{set\+\_\+tile\+\_\+map\+\_\+compat}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a429db030287423012f40a6dca81ae7e3}{set\+\_\+win\+\_\+tiles}}~\mbox{\hyperlink{sms_8h_a7c38b146f77eda84981c06c2271fe116}{set\+\_\+tile\+\_\+map\+\_\+compat}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a3b7ffab8d64e2c345f03221145a935c0}{fill\+\_\+bkg\+\_\+rect}}~\mbox{\hyperlink{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}{fill\+\_\+rect\+\_\+compat}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a5a69a3129f4faa99857a8b3d80db1d4a}{fill\+\_\+win\+\_\+rect}}~\mbox{\hyperlink{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}{fill\+\_\+rect\+\_\+compat}}
+\item
+\#define \mbox{\hyperlink{sms_8h_abfd70bf31185a4900680977c9fb5a5ec}{D\+I\+S\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER}}~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = 0
+\item
+\#define \mbox{\hyperlink{sms_8h_a77d516c9d3f86f100eddea5e0d133a76}{E\+N\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER}}~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})\&\mbox{\hyperlink{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}{shadow\+\_\+\+O\+AM}} $>$$>$ 8)
+\item
+\#define \mbox{\hyperlink{sms_8h_a8b77608c87a9aef65a03531482b2163b}{M\+A\+X\+\_\+\+H\+A\+R\+D\+W\+A\+R\+E\+\_\+\+S\+P\+R\+I\+T\+ES}}~64
+\item
+\#define \mbox{\hyperlink{sms_8h_adcd40a58f7c7d348d506cc400cd94739}{set\+\_\+bkg\+\_\+tile\+\_\+xy}}~\mbox{\hyperlink{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}{set\+\_\+tile\+\_\+xy}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a95d929d964d9988f4dc5a25ed399ae08}{set\+\_\+win\+\_\+tile\+\_\+xy}}~\mbox{\hyperlink{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}{set\+\_\+tile\+\_\+xy}}
+\item
+\#define \mbox{\hyperlink{sms_8h_a6eaafdbe6cf1695d30724ce75acb9412}{get\+\_\+win\+\_\+xy\+\_\+addr}}~\mbox{\hyperlink{sms_8h_a66b4bfb8c1ea3005ff01ce040a778e63}{get\+\_\+bkg\+\_\+xy\+\_\+addr}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef void($\ast$ \mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}) (void) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{sms_8h_a498b148efd22ab8ad9b844b2dc5e5bb8}{W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+C\+MD}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} cmd) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_aa2ddf9662320c4a9d00fd4a94d347570}{W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+D\+A\+TA}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} data) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} m) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_ad9a83378f5ec1f6444c879e4cf1e1a83}{get\+\_\+mode}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_aefda0091b2934571a11e07b512735f50}{set\+\_\+interrupts}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} flags) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_a98f7ef49e1758c601979bcb0ff19a1f0}{remove\+\_\+\+V\+BL}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_aa8962b27b960bb0c8d3bb899246c690c}{remove\+\_\+\+L\+CD}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_a98785a1b0ddc91cd8e8c8fab8de1de20}{remove\+\_\+\+T\+IM}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_a98de9141f407585801fcbf55bf6dcc4c}{remove\+\_\+\+S\+IO}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_a35a3ff12ab34534b763517576afe38a6}{remove\+\_\+\+J\+OY}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+BL}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{d}}
+\item
+void \mbox{\hyperlink{sms_8h_a51add93356a25c71e8c37a73c9065c9d}{add\+\_\+\+L\+CD}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_a6c66a583a8f0744e3985c89725e3dc10}{add\+\_\+\+T\+IM}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_a3372d61a07e0466bdb909a27f3aaaca9}{add\+\_\+\+S\+IO}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{sms_8h_a48163816121cd669526817d3e6266fd9}{add\+\_\+\+J\+OY}} (\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_ade5d4c955b871b0ed884273cc2b7215a}{cancel\+\_\+pending\+\_\+interrupts}} ()
+\item
+void \mbox{\hyperlink{sms_8h_a6261537edc74068e3f7f057e6a3e8a57}{move\+\_\+bkg}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{sms_8h_a1f583f7a880daa6145ca78b086a209d1}{scroll\+\_\+bkg}} (\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{sms_8h_acd186eb292d441f9389e77b545a55619}{wait\+\_\+vbl\+\_\+done}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}} ()
+\item
+void \mbox{\hyperlink{sms_8h_a7542d00af674e3c58b6c9887ab01919f}{refresh\+\_\+\+O\+AM}} ()
+\item
+void \mbox{\hyperlink{sms_8h_a217232c82eb5f99f7639b5786ce5abc6}{delay}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{d}}) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a176c477d759b814664785f3a0ad5e253}{joypad}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a79b565677967da5ef9bf1a00aa6776ce}{waitpad}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} mask) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+void \mbox{\hyperlink{sms_8h_a955d3733e5018f18b17a572aff45cf26}{waitpadup}} () \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_abe90cc2b5bb10c0ed9e01e548ddf8862}{joypad\+\_\+init}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} npads, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$joypads) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}}
+\item
+void \mbox{\hyperlink{sms_8h_a1d45c65829490c5ec98362f5e60edc20}{joypad\+\_\+ex}} (\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$joypads) \mbox{\hyperlink{asm_2z80_2types_8h_af45e54cf59a5202abc9125c07b64abf1}{Z88\+D\+K\+\_\+\+F\+A\+S\+T\+C\+A\+LL}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_abd34836339579013c097ae4dea10c014}{set\+\_\+default\+\_\+palette}} ()
+\item
+void \mbox{\hyperlink{sms_8h_a884a743919b234cd9c37789380784d08}{cpu\+\_\+fast}} ()
+\item
+void \mbox{\hyperlink{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}{set\+\_\+palette\+\_\+entry}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} entry, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} rgb\+\_\+data) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}{set\+\_\+palette}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} first\+\_\+palette, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb\+\_\+palettes, \mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$rgb\+\_\+data) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}}
+\item
+void \mbox{\hyperlink{sms_8h_a24764a152441b966ea04a83278c73207}{set\+\_\+native\+\_\+tile\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_aeff13dca11be49e8c159820c616016ec}{set\+\_\+bkg\+\_\+4bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_a24f53cfe7e25c04fbb5dcb08cfb3b432}{set\+\_\+sprite\+\_\+4bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_aa224c9bac27c7fd268e62bdf33338a84}{set\+\_\+2bpp\+\_\+palette}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} palette)
+\item
+void \mbox{\hyperlink{sms_8h_ab752b1bb0f58da2a6d52e9747c4b3dd8}{set\+\_\+tile\+\_\+2bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} palette) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a8130306da1177f4fef89e699f8e2add4}{set\+\_\+bkg\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}{set\+\_\+sprite\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_aa7ba76e4d44dbf19da351fd1ea8e3023}{set\+\_\+bkg\+\_\+2bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_a10ee2919fcab7a5c482816ed718d1c4a}{set\+\_\+sprite\+\_\+2bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_adcb394299a1033616fc7d2faec8bd6ad}{set\+\_\+1bpp\+\_\+colors}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} fgcolor, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} bgcolor)
+\item
+void \mbox{\hyperlink{sms_8h_a747033606e041b45ae09b38fdb06b871}{set\+\_\+tile\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} colors) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}{set\+\_\+bkg\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_a2cc121fbeb5570248531b85a8f0b5b97}{set\+\_\+sprite\+\_\+1bpp\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} start, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} ntiles, const void $\ast$src)
+\item
+void \mbox{\hyperlink{sms_8h_a8fe17423c7ef7c44f1ccff27d3afbebc}{set\+\_\+data}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} dst, const void $\ast$src, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} size) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a33a749b14dfbd203c460e8d7f3500636}{vmemcpy}} (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} dst, const void $\ast$src, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} size) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a14fc41e69085b5aa3da2fae9a2aa3ef3}{set\+\_\+tile\+\_\+map}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a7c38b146f77eda84981c06c2271fe116}{set\+\_\+tile\+\_\+map\+\_\+compat}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a811c386cac0df2d260aacb5a43608be5}{set\+\_\+bkg\+\_\+based\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{sms_8h_a739a212609ae60c9c56c095f96b4ea80}{set\+\_\+win\+\_\+based\+\_\+tiles}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$tiles, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{sms_8h_a84774e034fe0e70af62bd17ac716ba34}{set\+\_\+tile\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_aba0308b5e8e154cc920f041a185ac770}{set\+\_\+tile\+\_\+submap\+\_\+compat}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}{set\+\_\+bkg\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w)
+\item
+void \mbox{\hyperlink{sms_8h_abb50a392ca0d0419a080413287ee5d79}{set\+\_\+win\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w)
+\item
+void \mbox{\hyperlink{sms_8h_abc8bc5808620a9717263b8c9ec2237f0}{set\+\_\+bkg\+\_\+based\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{sms_8h_a1b8a1026983cb2b2c0bd46334b4692a0}{set\+\_\+win\+\_\+based\+\_\+submap}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$map, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} map\+\_\+w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} base\+\_\+tile)
+\item
+void \mbox{\hyperlink{sms_8h_aba932d128338fb19644842565139a20d}{fill\+\_\+rect}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} tile) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}{fill\+\_\+rect\+\_\+compat}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} w, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}, const \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} tile) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}{S\+E\+T\+\_\+\+S\+H\+A\+D\+O\+W\+\_\+\+O\+A\+M\+\_\+\+A\+D\+D\+R\+E\+SS}} (void $\ast$address)
+\item
+void \mbox{\hyperlink{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} tile)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_af5c0beff7d7a7d8641b51fd95c811b2a}{get\+\_\+sprite\+\_\+tile}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} prop)
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a6b873c807c9e2c90fb574951e85fdf88}{get\+\_\+sprite\+\_\+prop}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{sms_8h_ab42c12c1d9aed3fd963248fbea9830cd}{move\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{sms_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}{scroll\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} y)
+\item
+void \mbox{\hyperlink{sms_8h_ad22c51635d052399bbbe1777999c794d}{hide\+\_\+sprite}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} nb)
+\item
+void \mbox{\hyperlink{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}{set\+\_\+vram\+\_\+byte}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$addr, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} v) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{sms_8h_a476f433ea736a1dd610490238f2a6250}{set\+\_\+attributed\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} t) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}{set\+\_\+tile\+\_\+xy}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} t) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$ \mbox{\hyperlink{sms_8h_a66b4bfb8c1ea3005ff01ce040a778e63}{get\+\_\+bkg\+\_\+xy\+\_\+addr}} (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} x, \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} y) \mbox{\hyperlink{asm_2z80_2types_8h_aa19670cfef9fe1cc31f28fafb0e1000a}{Z88\+D\+K\+\_\+\+C\+A\+L\+L\+EE}} \mbox{\hyperlink{asm_2types_8h_acb825e83a33fcc06482c59b4ab2cf961}{P\+R\+E\+S\+E\+R\+V\+E\+S\+\_\+\+R\+E\+GS}}(\mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Variables}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\item
+void \mbox{\hyperlink{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{d}}
+\item
+void \mbox{\hyperlink{sms_8h_aeda4515a31485c9688c4601ac5ce2d79}{e}}
+\item
+void \mbox{\hyperlink{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}{iyh}}
+\item
+void \mbox{\hyperlink{sms_8h_af279c752a3b15c4bd5c67f54b92e553f}{iyl}}
+\item
+void \mbox{\hyperlink{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}{h}}
+\item
+void \mbox{\hyperlink{sms_8h_af79b920bcb642bba2e652874c4f7eeff}{l}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_8h_a22dc57e538f0f49e2dc7d1c73f67fc8f}{\+\_\+current\+\_\+2bpp\+\_\+palette}}
+\item
+\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{sms_8h_a250f5339e05523912926be566e9eb8c0}{\+\_\+current\+\_\+1bpp\+\_\+colors}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_aa82205e9629f984d0b3dc8055c211522}{\+\_\+map\+\_\+tile\+\_\+offset}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_ab472d9bbb1bcfd141374f5babc71934c}{\+\_\+submap\+\_\+tile\+\_\+offset}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}{shadow\+\_\+\+O\+AM}} \mbox{[}$\,$\mbox{]}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}}
+\item
+volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{sms_8h_a388d1dff2698172ba8574e43f5c77c93}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+\+O\+FF}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+S\+M\+S/\+GG specific functions.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{sms_8h_a19e5fbd76b85bf708ec31d55905fc537}\label{sms_8h_a19e5fbd76b85bf708ec31d55905fc537}}
+\index{sms.h@{sms.h}!SEGA@{SEGA}}
+\index{SEGA@{SEGA}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SEGA}{SEGA}}
+{\footnotesize\ttfamily \#define S\+E\+GA}
+
+\mbox{\Hypertarget{sms_8h_a6bc34abf062d8e3be88170ac106f197f}\label{sms_8h_a6bc34abf062d8e3be88170ac106f197f}}
+\index{sms.h@{sms.h}!VBK\_REG@{VBK\_REG}}
+\index{VBK\_REG@{VBK\_REG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{VBK\_REG}{VBK\_REG}}
+{\footnotesize\ttfamily \#define V\+B\+K\+\_\+\+R\+EG~\mbox{\hyperlink{sms_2hardware_8h_a019bf78a6d586c987aec03af8d20e02f}{V\+D\+P\+\_\+\+A\+T\+T\+R\+\_\+\+S\+H\+I\+FT}}}
+
+\mbox{\Hypertarget{sms_8h_a05ca817ab32f6da612c3ae26db5abf02}\label{sms_8h_a05ca817ab32f6da612c3ae26db5abf02}}
+\index{sms.h@{sms.h}!J\_UP@{J\_UP}}
+\index{J\_UP@{J\_UP}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_UP}{J\_UP}}
+{\footnotesize\ttfamily \#define J\+\_\+\+UP~0b00000001}
+
+Joypad bits. A logical OR of these is used in the wait\+\_\+pad and joypad functions. For example, to see if the B button is pressed try
+
+uint8\+\_\+t keys; keys = \mbox{\hyperlink{sms_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}}; if (keys \& J\+\_\+B) \{ ... \}
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a176c477d759b814664785f3a0ad5e253}{joypad}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ae032c5c544196e37ec0432f6cfad7904}\label{sms_8h_ae032c5c544196e37ec0432f6cfad7904}}
+\index{sms.h@{sms.h}!J\_DOWN@{J\_DOWN}}
+\index{J\_DOWN@{J\_DOWN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_DOWN}{J\_DOWN}}
+{\footnotesize\ttfamily \#define J\+\_\+\+D\+O\+WN~0b00000010}
+
+\mbox{\Hypertarget{sms_8h_ac70894fecac30c1ca9917f07373cf81c}\label{sms_8h_ac70894fecac30c1ca9917f07373cf81c}}
+\index{sms.h@{sms.h}!J\_LEFT@{J\_LEFT}}
+\index{J\_LEFT@{J\_LEFT}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_LEFT}{J\_LEFT}}
+{\footnotesize\ttfamily \#define J\+\_\+\+L\+E\+FT~0b00000100}
+
+\mbox{\Hypertarget{sms_8h_a3bad91d11ae09ffcbb3cb0a81873d325}\label{sms_8h_a3bad91d11ae09ffcbb3cb0a81873d325}}
+\index{sms.h@{sms.h}!J\_RIGHT@{J\_RIGHT}}
+\index{J\_RIGHT@{J\_RIGHT}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_RIGHT}{J\_RIGHT}}
+{\footnotesize\ttfamily \#define J\+\_\+\+R\+I\+G\+HT~0b00001000}
+
+\mbox{\Hypertarget{sms_8h_a31af766e3b598eb7a6b63f55a4988e7a}\label{sms_8h_a31af766e3b598eb7a6b63f55a4988e7a}}
+\index{sms.h@{sms.h}!J\_A@{J\_A}}
+\index{J\_A@{J\_A}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_A}{J\_A}}
+{\footnotesize\ttfamily \#define J\+\_\+A~0b00010000}
+
+\mbox{\Hypertarget{sms_8h_ae47e59a309120f9420993f26816b5e6d}\label{sms_8h_ae47e59a309120f9420993f26816b5e6d}}
+\index{sms.h@{sms.h}!J\_B@{J\_B}}
+\index{J\_B@{J\_B}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{J\_B}{J\_B}}
+{\footnotesize\ttfamily \#define J\+\_\+B~0b00100000}
+
+\mbox{\Hypertarget{sms_8h_af0e30d6af308ffe5a025fbe85da40f6f}\label{sms_8h_af0e30d6af308ffe5a025fbe85da40f6f}}
+\index{sms.h@{sms.h}!M\_TEXT\_OUT@{M\_TEXT\_OUT}}
+\index{M\_TEXT\_OUT@{M\_TEXT\_OUT}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{M\_TEXT\_OUT}{M\_TEXT\_OUT}}
+{\footnotesize\ttfamily \#define M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT~0x02U}
+
+Screen modes. Normally used by internal functions only. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a908826e7180f94a5988ceb8633313a2e}\label{sms_8h_a908826e7180f94a5988ceb8633313a2e}}
+\index{sms.h@{sms.h}!M\_TEXT\_INOUT@{M\_TEXT\_INOUT}}
+\index{M\_TEXT\_INOUT@{M\_TEXT\_INOUT}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{M\_TEXT\_INOUT}{M\_TEXT\_INOUT}}
+{\footnotesize\ttfamily \#define M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT~0x03U}
+
+\mbox{\Hypertarget{sms_8h_a04382de20738146fe873ddfb0585052b}\label{sms_8h_a04382de20738146fe873ddfb0585052b}}
+\index{sms.h@{sms.h}!M\_NO\_SCROLL@{M\_NO\_SCROLL}}
+\index{M\_NO\_SCROLL@{M\_NO\_SCROLL}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{M\_NO\_SCROLL}{M\_NO\_SCROLL}}
+{\footnotesize\ttfamily \#define M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL~0x04U}
+
+Set this in addition to the others to disable scrolling
+
+If scrolling is disabled, the cursor returns to (0,0) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_aca2855edd2d28f66be551a0f7ec23f07}\label{sms_8h_aca2855edd2d28f66be551a0f7ec23f07}}
+\index{sms.h@{sms.h}!M\_NO\_INTERP@{M\_NO\_INTERP}}
+\index{M\_NO\_INTERP@{M\_NO\_INTERP}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{M\_NO\_INTERP}{M\_NO\_INTERP}}
+{\footnotesize\ttfamily \#define M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP~0x08U}
+
+Set this to disable interpretation \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a3ea524204d839377cf39842eec23e202}{mode()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ae97793b4039609f93b0f7f8bddb18011}\label{sms_8h_ae97793b4039609f93b0f7f8bddb18011}}
+\index{sms.h@{sms.h}!S\_FLIPX@{S\_FLIPX}}
+\index{S\_FLIPX@{S\_FLIPX}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{S\_FLIPX}{S\_FLIPX}}
+{\footnotesize\ttfamily \#define S\+\_\+\+F\+L\+I\+PX~0x02U}
+
+If set the background tile will be flipped horizontally. \mbox{\Hypertarget{sms_8h_a4bbb9cd6c38b2317de5256d1d889c63b}\label{sms_8h_a4bbb9cd6c38b2317de5256d1d889c63b}}
+\index{sms.h@{sms.h}!S\_FLIPY@{S\_FLIPY}}
+\index{S\_FLIPY@{S\_FLIPY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{S\_FLIPY}{S\_FLIPY}}
+{\footnotesize\ttfamily \#define S\+\_\+\+F\+L\+I\+PY~0x04U}
+
+If set the background tile will be flipped vertically. \mbox{\Hypertarget{sms_8h_a54572cf6791463b6d60623837e0bb5a6}\label{sms_8h_a54572cf6791463b6d60623837e0bb5a6}}
+\index{sms.h@{sms.h}!S\_PALETTE@{S\_PALETTE}}
+\index{S\_PALETTE@{S\_PALETTE}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{S\_PALETTE}{S\_PALETTE}}
+{\footnotesize\ttfamily \#define S\+\_\+\+P\+A\+L\+E\+T\+TE~0x08U}
+
+If set the background tile palette. \mbox{\Hypertarget{sms_8h_a9506d04c2ec7d2442a52054f67d2b32f}\label{sms_8h_a9506d04c2ec7d2442a52054f67d2b32f}}
+\index{sms.h@{sms.h}!S\_PRIORITY@{S\_PRIORITY}}
+\index{S\_PRIORITY@{S\_PRIORITY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{S\_PRIORITY}{S\_PRIORITY}}
+{\footnotesize\ttfamily \#define S\+\_\+\+P\+R\+I\+O\+R\+I\+TY~0x10U}
+
+If set the background tile priority. \mbox{\Hypertarget{sms_8h_aa34282113397af810be737df1acec36c}\label{sms_8h_aa34282113397af810be737df1acec36c}}
+\index{sms.h@{sms.h}!\_\_WRITE\_VDP\_REG@{\_\_WRITE\_VDP\_REG}}
+\index{\_\_WRITE\_VDP\_REG@{\_\_WRITE\_VDP\_REG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_\_WRITE\_VDP\_REG}{\_\_WRITE\_VDP\_REG}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG(\begin{DoxyParamCaption}\item[{}]{R\+EG, }\item[{}]{v }\end{DoxyParamCaption})~shadow\+\_\+\#\#R\+EG=(v);\+\_\+\+\_\+critical\{V\+D\+P\+\_\+\+C\+MD=(shadow\+\_\+\#\#R\+EG),V\+D\+P\+\_\+\+C\+MD=R\+EG;\}}
+
+\mbox{\Hypertarget{sms_8h_a964e713cb2535d7464d0d6ca7677049a}\label{sms_8h_a964e713cb2535d7464d0d6ca7677049a}}
+\index{sms.h@{sms.h}!\_\_READ\_VDP\_REG@{\_\_READ\_VDP\_REG}}
+\index{\_\_READ\_VDP\_REG@{\_\_READ\_VDP\_REG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_\_READ\_VDP\_REG}{\_\_READ\_VDP\_REG}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG(\begin{DoxyParamCaption}\item[{}]{R\+EG }\end{DoxyParamCaption})~shadow\+\_\+\#\#R\+EG}
+
+\mbox{\Hypertarget{sms_8h_aa027abe630d44039f238034bcb2d2f36}\label{sms_8h_aa027abe630d44039f238034bcb2d2f36}}
+\index{sms.h@{sms.h}!EMPTY\_IFLAG@{EMPTY\_IFLAG}}
+\index{EMPTY\_IFLAG@{EMPTY\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{EMPTY\_IFLAG}{EMPTY\_IFLAG}}
+{\footnotesize\ttfamily \#define E\+M\+P\+T\+Y\+\_\+\+I\+F\+L\+AG~0x00U}
+
+Disable calling of interrupt service routines \mbox{\Hypertarget{sms_8h_a2ca7720b9a5da9b2173e1f74dba85541}\label{sms_8h_a2ca7720b9a5da9b2173e1f74dba85541}}
+\index{sms.h@{sms.h}!VBL\_IFLAG@{VBL\_IFLAG}}
+\index{VBL\_IFLAG@{VBL\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{VBL\_IFLAG}{VBL\_IFLAG}}
+{\footnotesize\ttfamily \#define V\+B\+L\+\_\+\+I\+F\+L\+AG~0x01U}
+
+V\+Blank Interrupt occurs at the start of the vertical blank.
+
+During this period the video ram may be freely accessed. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_aefda0091b2934571a11e07b512735f50}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+BL}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a61a9e2910380de6abb34df14ef634eb4}\label{sms_8h_a61a9e2910380de6abb34df14ef634eb4}}
+\index{sms.h@{sms.h}!LCD\_IFLAG@{LCD\_IFLAG}}
+\index{LCD\_IFLAG@{LCD\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{LCD\_IFLAG}{LCD\_IFLAG}}
+{\footnotesize\ttfamily \#define L\+C\+D\+\_\+\+I\+F\+L\+AG~0x02U}
+
+L\+CD Interrupt when triggered by the S\+T\+AT register. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_aefda0091b2934571a11e07b512735f50}{set\+\_\+interrupts()}},
+
+\mbox{\hyperlink{sms_8h_a51add93356a25c71e8c37a73c9065c9d}{add\+\_\+\+L\+CD}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a604256210ec5b90b68185e1a18efab49}\label{sms_8h_a604256210ec5b90b68185e1a18efab49}}
+\index{sms.h@{sms.h}!TIM\_IFLAG@{TIM\_IFLAG}}
+\index{TIM\_IFLAG@{TIM\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{TIM\_IFLAG}{TIM\_IFLAG}}
+{\footnotesize\ttfamily \#define T\+I\+M\+\_\+\+I\+F\+L\+AG~0x04U}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_ad90564458646c5646b3880b93db3443e}\label{sms_8h_ad90564458646c5646b3880b93db3443e}}
+\index{sms.h@{sms.h}!SIO\_IFLAG@{SIO\_IFLAG}}
+\index{SIO\_IFLAG@{SIO\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SIO\_IFLAG}{SIO\_IFLAG}}
+{\footnotesize\ttfamily \#define S\+I\+O\+\_\+\+I\+F\+L\+AG~0x08U}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_a2f829cf27d6e3e24c875e9b82dfcb280}\label{sms_8h_a2f829cf27d6e3e24c875e9b82dfcb280}}
+\index{sms.h@{sms.h}!JOY\_IFLAG@{JOY\_IFLAG}}
+\index{JOY\_IFLAG@{JOY\_IFLAG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{JOY\_IFLAG}{JOY\_IFLAG}}
+{\footnotesize\ttfamily \#define J\+O\+Y\+\_\+\+I\+F\+L\+AG~0x10U}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_ada0cc738d27aad251151e69cb8d250e1}\label{sms_8h_ada0cc738d27aad251151e69cb8d250e1}}
+\index{sms.h@{sms.h}!SCREENWIDTH@{SCREENWIDTH}}
+\index{SCREENWIDTH@{SCREENWIDTH}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SCREENWIDTH}{SCREENWIDTH}}
+{\footnotesize\ttfamily \#define S\+C\+R\+E\+E\+N\+W\+I\+D\+TH~\mbox{\hyperlink{sms_2hardware_8h_ad14c51cdfb347c34c364f54e67dc978d}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+W\+I\+D\+TH}}}
+
+Width of the visible screen in pixels. \mbox{\Hypertarget{sms_8h_ae189e98d0ef9263c37869ce1ff3710a5}\label{sms_8h_ae189e98d0ef9263c37869ce1ff3710a5}}
+\index{sms.h@{sms.h}!SCREENHEIGHT@{SCREENHEIGHT}}
+\index{SCREENHEIGHT@{SCREENHEIGHT}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SCREENHEIGHT}{SCREENHEIGHT}}
+{\footnotesize\ttfamily \#define S\+C\+R\+E\+E\+N\+H\+E\+I\+G\+HT~\mbox{\hyperlink{sms_2hardware_8h_a7bd450aa268b881257089cf8cd6697ec}{D\+E\+V\+I\+C\+E\+\_\+\+S\+C\+R\+E\+E\+N\+\_\+\+P\+X\+\_\+\+H\+E\+I\+G\+HT}}}
+
+Height of the visible screen in pixels. \mbox{\Hypertarget{sms_8h_a5a796bbf3e4347d914b83568350143a9}\label{sms_8h_a5a796bbf3e4347d914b83568350143a9}}
+\index{sms.h@{sms.h}!MINWNDPOSX@{MINWNDPOSX}}
+\index{MINWNDPOSX@{MINWNDPOSX}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{MINWNDPOSX}{MINWNDPOSX}}
+{\footnotesize\ttfamily \#define M\+I\+N\+W\+N\+D\+P\+O\+SX~0x00U}
+
+The Minimum X position of the Window Layer (Left edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_af3d632ba2d7cef6619df5dfea8730909}\label{sms_8h_af3d632ba2d7cef6619df5dfea8730909}}
+\index{sms.h@{sms.h}!MINWNDPOSY@{MINWNDPOSY}}
+\index{MINWNDPOSY@{MINWNDPOSY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{MINWNDPOSY}{MINWNDPOSY}}
+{\footnotesize\ttfamily \#define M\+I\+N\+W\+N\+D\+P\+O\+SY~0x00U}
+
+The Minimum Y position of the Window Layer (Top edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}\label{sms_8h_a6dffb66ec1b1d9bb380a1af52a601ec5}}
+\index{sms.h@{sms.h}!MAXWNDPOSX@{MAXWNDPOSX}}
+\index{MAXWNDPOSX@{MAXWNDPOSX}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{MAXWNDPOSX}{MAXWNDPOSX}}
+{\footnotesize\ttfamily \#define M\+A\+X\+W\+N\+D\+P\+O\+SX~0x00U}
+
+The Maximum X position of the Window Layer (Right edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ad57f2f8c54204687f02801d8ab1bd150}\label{sms_8h_ad57f2f8c54204687f02801d8ab1bd150}}
+\index{sms.h@{sms.h}!MAXWNDPOSY@{MAXWNDPOSY}}
+\index{MAXWNDPOSY@{MAXWNDPOSY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{MAXWNDPOSY}{MAXWNDPOSY}}
+{\footnotesize\ttfamily \#define M\+A\+X\+W\+N\+D\+P\+O\+SY~0x00U}
+
+The Maximum Y position of the Window Layer (Bottom edge of screen) \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_aeef17768c494bcd6b67f7591329f7ff5}{move\+\_\+win()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}\label{sms_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}}
+\index{sms.h@{sms.h}!DISPLAY\_ON@{DISPLAY\_ON}}
+\index{DISPLAY\_ON@{DISPLAY\_ON}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{DISPLAY\_ON}{DISPLAY\_ON}}
+{\footnotesize\ttfamily \#define D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_adbfdd7c42539613c371820dffd14906f}{R1\+\_\+\+D\+I\+S\+P\+\_\+\+ON}})}
+
+Turns the display back on. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}, \mbox{\hyperlink{sms_8h_ad2ec9831813c5e7069917aa4455af682}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ad2ec9831813c5e7069917aa4455af682}\label{sms_8h_ad2ec9831813c5e7069917aa4455af682}}
+\index{sms.h@{sms.h}!DISPLAY\_OFF@{DISPLAY\_OFF}}
+\index{DISPLAY\_OFF@{DISPLAY\_OFF}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{DISPLAY\_OFF}{DISPLAY\_OFF}}
+{\footnotesize\ttfamily \#define D\+I\+S\+P\+L\+A\+Y\+\_\+\+O\+FF~ \mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}();}
+
+Turns the display off immediately. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}{display\+\_\+off}}, \mbox{\hyperlink{sms_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a0659212acd317ccdebc0ecf435df330f}\label{sms_8h_a0659212acd317ccdebc0ecf435df330f}}
+\index{sms.h@{sms.h}!HIDE\_LEFT\_COLUMN@{HIDE\_LEFT\_COLUMN}}
+\index{HIDE\_LEFT\_COLUMN@{HIDE\_LEFT\_COLUMN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_LEFT\_COLUMN}{HIDE\_LEFT\_COLUMN}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}{R0\+\_\+\+L\+CB}})}
+
+Blanks leftmost column, so it is not garbaged when you use horizontal scroll \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a5497c2255a9474d397446710189eacbe}{S\+H\+O\+W\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a5497c2255a9474d397446710189eacbe}\label{sms_8h_a5497c2255a9474d397446710189eacbe}}
+\index{sms.h@{sms.h}!SHOW\_LEFT\_COLUMN@{SHOW\_LEFT\_COLUMN}}
+\index{SHOW\_LEFT\_COLUMN@{SHOW\_LEFT\_COLUMN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_LEFT\_COLUMN}{SHOW\_LEFT\_COLUMN}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a673a19a1e353c852003c54d1d110b5e6}{V\+D\+P\+\_\+\+R0}}) \&= ($\sim$\mbox{\hyperlink{sms_2hardware_8h_a83088549f6d87bf5ccb8bf51dfe7ea7b}{R0\+\_\+\+L\+CB}}))}
+
+Shows leftmost column \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a0659212acd317ccdebc0ecf435df330f}{H\+I\+D\+E\+\_\+\+L\+E\+F\+T\+\_\+\+C\+O\+L\+U\+MN}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a8e3f36aa68ac036695816757f2a1322c}\label{sms_8h_a8e3f36aa68ac036695816757f2a1322c}}
+\index{sms.h@{sms.h}!SHOW\_BKG@{SHOW\_BKG}}
+\index{SHOW\_BKG@{SHOW\_BKG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_BKG}{SHOW\_BKG}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+B\+KG}
+
+Turns on the background layer. Not yet implemented \mbox{\Hypertarget{sms_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}\label{sms_8h_a6d25f7c43b1cbbb48b95cda7ab2c3141}}
+\index{sms.h@{sms.h}!HIDE\_BKG@{HIDE\_BKG}}
+\index{HIDE\_BKG@{HIDE\_BKG}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_BKG}{HIDE\_BKG}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+B\+KG}
+
+Turns off the background layer. Not yet implemented \mbox{\Hypertarget{sms_8h_ab19da2ab719bb8897bc0843a84af28f8}\label{sms_8h_ab19da2ab719bb8897bc0843a84af28f8}}
+\index{sms.h@{sms.h}!SHOW\_WIN@{SHOW\_WIN}}
+\index{SHOW\_WIN@{SHOW\_WIN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_WIN}{SHOW\_WIN}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+W\+IN}
+
+Turns on the window layer Not yet implemented \mbox{\Hypertarget{sms_8h_aedb6e32c42d4b1d25ad11adccd7100c3}\label{sms_8h_aedb6e32c42d4b1d25ad11adccd7100c3}}
+\index{sms.h@{sms.h}!HIDE\_WIN@{HIDE\_WIN}}
+\index{HIDE\_WIN@{HIDE\_WIN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_WIN}{HIDE\_WIN}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+W\+IN}
+
+Turns off the window layer. Not yet implemented \mbox{\Hypertarget{sms_8h_a495bc9f405f916f02ad5d97e6e730134}\label{sms_8h_a495bc9f405f916f02ad5d97e6e730134}}
+\index{sms.h@{sms.h}!SHOW\_SPRITES@{SHOW\_SPRITES}}
+\index{SHOW\_SPRITES@{SHOW\_SPRITES}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SHOW\_SPRITES}{SHOW\_SPRITES}}
+{\footnotesize\ttfamily \#define S\+H\+O\+W\+\_\+\+S\+P\+R\+I\+T\+ES}
+
+Turns on the sprites layer. Not yet implemented \mbox{\Hypertarget{sms_8h_a69ef98aee664b8abd8d1a3d45f016dda}\label{sms_8h_a69ef98aee664b8abd8d1a3d45f016dda}}
+\index{sms.h@{sms.h}!HIDE\_SPRITES@{HIDE\_SPRITES}}
+\index{HIDE\_SPRITES@{HIDE\_SPRITES}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{HIDE\_SPRITES}{HIDE\_SPRITES}}
+{\footnotesize\ttfamily \#define H\+I\+D\+E\+\_\+\+S\+P\+R\+I\+T\+ES}
+
+Turns off the sprites layer. Not yet implemented \mbox{\Hypertarget{sms_8h_af91d252f07f4764996154820f970c101}\label{sms_8h_af91d252f07f4764996154820f970c101}}
+\index{sms.h@{sms.h}!SPRITES\_8x16@{SPRITES\_8x16}}
+\index{SPRITES\_8x16@{SPRITES\_8x16}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SPRITES\_8x16}{SPRITES\_8x16}}
+{\footnotesize\ttfamily \#define S\+P\+R\+I\+T\+E\+S\+\_\+8x16~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) $\vert$= \mbox{\hyperlink{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}{R1\+\_\+\+S\+P\+R\+\_\+8\+X16}})}
+
+Sets sprite size to 8x16 pixels, two tiles one above the other. \mbox{\Hypertarget{sms_8h_aa87bec0d134136fdb727f52cb773b792}\label{sms_8h_aa87bec0d134136fdb727f52cb773b792}}
+\index{sms.h@{sms.h}!SPRITES\_8x8@{SPRITES\_8x8}}
+\index{SPRITES\_8x8@{SPRITES\_8x8}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SPRITES\_8x8}{SPRITES\_8x8}}
+{\footnotesize\ttfamily \#define S\+P\+R\+I\+T\+E\+S\+\_\+8x8~ \mbox{\hyperlink{sms_8h_aa34282113397af810be737df1acec36c}{\+\_\+\+\_\+\+W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}, \mbox{\hyperlink{sms_8h_a964e713cb2535d7464d0d6ca7677049a}{\+\_\+\+\_\+\+R\+E\+A\+D\+\_\+\+V\+D\+P\+\_\+\+R\+EG}}(\mbox{\hyperlink{sms_2hardware_8h_a413fdabdacfcda90cc73a04311a2ec6d}{V\+D\+P\+\_\+\+R1}}) \&= ($\sim$\mbox{\hyperlink{sms_2hardware_8h_a4985d6df1031afe8efb993f9c480ca12}{R1\+\_\+\+S\+P\+R\+\_\+8\+X16}}))}
+
+Sets sprite size to 8x8 pixels, one tile. \mbox{\Hypertarget{sms_8h_a231ec05679809190782e61c6e8aaaba4}\label{sms_8h_a231ec05679809190782e61c6e8aaaba4}}
+\index{sms.h@{sms.h}!DEVICE\_SUPPORTS\_COLOR@{DEVICE\_SUPPORTS\_COLOR}}
+\index{DEVICE\_SUPPORTS\_COLOR@{DEVICE\_SUPPORTS\_COLOR}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{DEVICE\_SUPPORTS\_COLOR}{DEVICE\_SUPPORTS\_COLOR}}
+{\footnotesize\ttfamily \#define D\+E\+V\+I\+C\+E\+\_\+\+S\+U\+P\+P\+O\+R\+T\+S\+\_\+\+C\+O\+L\+OR~(\mbox{\hyperlink{types_8h_aa8cecfc5c5c054d2875c03e77b7be15d}{T\+R\+UE}})}
+
+Macro returns T\+R\+UE if device supports color (it always does on S\+M\+S/\+GG) \mbox{\Hypertarget{sms_8h_af0d15cf2a26924d2ef00ac4017e6b1d8}\label{sms_8h_af0d15cf2a26924d2ef00ac4017e6b1d8}}
+\index{sms.h@{sms.h}!\_current\_bank@{\_current\_bank}}
+\index{\_current\_bank@{\_current\_bank}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_current\_bank}{\_current\_bank}}
+{\footnotesize\ttfamily \#define \+\_\+current\+\_\+bank~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1}
+
+Tracks current active R\+OM bank in frame 1 \mbox{\Hypertarget{sms_8h_ae042588f20bf5a2349c8ad8716245233}\label{sms_8h_ae042588f20bf5a2349c8ad8716245233}}
+\index{sms.h@{sms.h}!CURRENT\_BANK@{CURRENT\_BANK}}
+\index{CURRENT\_BANK@{CURRENT\_BANK}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{CURRENT\_BANK}{CURRENT\_BANK}}
+{\footnotesize\ttfamily \#define C\+U\+R\+R\+E\+N\+T\+\_\+\+B\+A\+NK~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1}
+
+\mbox{\Hypertarget{sms_8h_a42705001e2b9897f5167b67fb36c69dd}\label{sms_8h_a42705001e2b9897f5167b67fb36c69dd}}
+\index{sms.h@{sms.h}!BANK@{BANK}}
+\index{BANK@{BANK}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{BANK}{BANK}}
+{\footnotesize\ttfamily \#define B\+A\+NK(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~( (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}) \& \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME )}
+
+Obtains the {\bfseries{bank number}} of V\+A\+R\+N\+A\+ME
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable which has a \+\_\+\+\_\+bank\+\_\+\+V\+A\+R\+N\+A\+ME companion symbol which is adjusted by bankpack\\
+\hline
+\end{DoxyParams}
+Use this to obtain the bank number from a bank reference created with \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}}, \mbox{\hyperlink{sms_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a086293f2afb4c7945460a4496b20aea3}\label{sms_8h_a086293f2afb4c7945460a4496b20aea3}}
+\index{sms.h@{sms.h}!BANKREF@{BANKREF}}
+\index{BANKREF@{BANKREF}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{BANKREF}{BANKREF}}
+{\footnotesize\ttfamily \#define B\+A\+N\+K\+R\+EF(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})}
+
+{\bfseries Value\+:}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{keywordtype}{void} \_\_func\_ \#\# VARNAME() \_\_banked \_\_naked \{ \(\backslash\)}
+\DoxyCodeLine{\_\_asm \(\backslash\)}
+\DoxyCodeLine{ .local b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ \_\_\_bank\_ \#\# VARNAME = b\_\_\_func\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{ .globl \_\_\_bank\_ \#\# VARNAME \(\backslash\)}
+\DoxyCodeLine{\_\_endasm; \(\backslash\)}
+\DoxyCodeLine{\}}
+
+\end{DoxyCode}
+Creates a reference for retrieving the bank number of a variable or function
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Variable name to use, which may be an existing identifier\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}} for obtaining the bank number of the included data.
+\end{DoxySeeAlso}
+More than one {\ttfamily \mbox{\hyperlink{sms_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}} may be created per file, but each call should always use a unique V\+A\+R\+N\+A\+ME.
+
+Use \mbox{\hyperlink{gb_8h_a261bba55a07b802baf99346feadd9852}{B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+R\+N()}} within another source file to make the variable and it\textquotesingle{}s data accesible there. \mbox{\Hypertarget{sms_8h_a261bba55a07b802baf99346feadd9852}\label{sms_8h_a261bba55a07b802baf99346feadd9852}}
+\index{sms.h@{sms.h}!BANKREF\_EXTERN@{BANKREF\_EXTERN}}
+\index{BANKREF\_EXTERN@{BANKREF\_EXTERN}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{BANKREF\_EXTERN}{BANKREF\_EXTERN}}
+{\footnotesize\ttfamily \#define B\+A\+N\+K\+R\+E\+F\+\_\+\+E\+X\+T\+E\+RN(\begin{DoxyParamCaption}\item[{}]{V\+A\+R\+N\+A\+ME }\end{DoxyParamCaption})~extern const void \+\_\+\+\_\+bank\+\_\+ \#\# V\+A\+R\+N\+A\+ME;}
+
+Creates extern references for accessing a \mbox{\hyperlink{sms_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}} generated variable.
+
+
+\begin{DoxyParams}{Parameters}
+{\em V\+A\+R\+N\+A\+ME} & Name of the variable used with \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}\\
+\hline
+\end{DoxyParams}
+This makes a \mbox{\hyperlink{gb_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}} reference in another source file accessible in the current file for use with \mbox{\hyperlink{gb_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a086293f2afb4c7945460a4496b20aea3}{B\+A\+N\+K\+R\+E\+F()}}, \mbox{\hyperlink{sms_8h_a42705001e2b9897f5167b67fb36c69dd}{B\+A\+N\+K()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_af61262bbc05629f31020afce67e1b9ea}\label{sms_8h_af61262bbc05629f31020afce67e1b9ea}}
+\index{sms.h@{sms.h}!SWITCH\_ROM@{SWITCH\_ROM}}
+\index{SWITCH\_ROM@{SWITCH\_ROM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM}{SWITCH\_ROM}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+OM(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~M\+A\+P\+\_\+\+F\+R\+A\+M\+E1=(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Makes switch the active R\+OM bank in frame 1
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_8h_a86d47feb2b999aaabbba9f63f4bb3567}\label{sms_8h_a86d47feb2b999aaabbba9f63f4bb3567}}
+\index{sms.h@{sms.h}!SWITCH\_ROM1@{SWITCH\_ROM1}}
+\index{SWITCH\_ROM1@{SWITCH\_ROM1}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM1}{SWITCH\_ROM1}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M1~\mbox{\hyperlink{sms_8h_af61262bbc05629f31020afce67e1b9ea}{S\+W\+I\+T\+C\+H\+\_\+\+R\+OM}}}
+
+\mbox{\Hypertarget{sms_8h_a6d40a15ff27c2a1c8269d3dbe67eae65}\label{sms_8h_a6d40a15ff27c2a1c8269d3dbe67eae65}}
+\index{sms.h@{sms.h}!SWITCH\_ROM2@{SWITCH\_ROM2}}
+\index{SWITCH\_ROM2@{SWITCH\_ROM2}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_ROM2}{SWITCH\_ROM2}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+O\+M2(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~M\+A\+P\+\_\+\+F\+R\+A\+M\+E2=(\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})}
+
+Makes switch the active R\+OM bank in frame 2
+\begin{DoxyParams}{Parameters}
+{\em b} & R\+OM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_8h_a121feb0c32d124562f52398aa9656e7b}\label{sms_8h_a121feb0c32d124562f52398aa9656e7b}}
+\index{sms.h@{sms.h}!SWITCH\_RAM@{SWITCH\_RAM}}
+\index{SWITCH\_RAM@{SWITCH\_RAM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SWITCH\_RAM}{SWITCH\_RAM}}
+{\footnotesize\ttfamily \#define S\+W\+I\+T\+C\+H\+\_\+\+R\+AM(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}} }\end{DoxyParamCaption})~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL=((\mbox{\hyperlink{gb_8h_a4c2e4adef74067fdbb49005bc73de937}{b}})\&1)?R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL$\vert$R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+N\+K\+:\+R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL\&($\sim$\mbox{\hyperlink{sms_2hardware_8h_a8f4dbe8a2e6389c78b9f6fb9a3ff1dca}{R\+A\+M\+C\+T\+L\+\_\+\+B\+A\+NK}})}
+
+Switches R\+AM bank
+\begin{DoxyParams}{Parameters}
+{\em b} & S\+R\+AM bank to switch to \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_8h_a0e9c88657beaac946231a4801481b97f}\label{sms_8h_a0e9c88657beaac946231a4801481b97f}}
+\index{sms.h@{sms.h}!ENABLE\_RAM@{ENABLE\_RAM}}
+\index{ENABLE\_RAM@{ENABLE\_RAM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_RAM}{ENABLE\_RAM}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+R\+AM~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL$\vert$=\mbox{\hyperlink{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}{R\+A\+M\+C\+T\+L\+\_\+\+R\+AM}}}
+
+Enables R\+AM \mbox{\Hypertarget{sms_8h_a649d27b5587de16a66176e03a1b8ebd5}\label{sms_8h_a649d27b5587de16a66176e03a1b8ebd5}}
+\index{sms.h@{sms.h}!DISABLE\_RAM@{DISABLE\_RAM}}
+\index{DISABLE\_RAM@{DISABLE\_RAM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_RAM}{DISABLE\_RAM}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+R\+AM~R\+A\+M\+\_\+\+C\+O\+N\+T\+R\+OL\&=($\sim$\mbox{\hyperlink{sms_2hardware_8h_a8728acabf97eae3322439bc3cb41b02d}{R\+A\+M\+C\+T\+L\+\_\+\+R\+AM}})}
+
+Disables R\+AM \mbox{\Hypertarget{sms_8h_a2215732f2ba2ec6406b65d3cca56a200}\label{sms_8h_a2215732f2ba2ec6406b65d3cca56a200}}
+\index{sms.h@{sms.h}!set\_bkg\_palette\_entry@{set\_bkg\_palette\_entry}}
+\index{set\_bkg\_palette\_entry@{set\_bkg\_palette\_entry}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_palette\_entry}{set\_bkg\_palette\_entry}}
+{\footnotesize\ttfamily \#define set\+\_\+bkg\+\_\+palette\+\_\+entry~\mbox{\hyperlink{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}{set\+\_\+palette\+\_\+entry}}}
+
+\mbox{\Hypertarget{sms_8h_a8b5c17235a3f65af70492e109a25f237}\label{sms_8h_a8b5c17235a3f65af70492e109a25f237}}
+\index{sms.h@{sms.h}!set\_sprite\_palette\_entry@{set\_sprite\_palette\_entry}}
+\index{set\_sprite\_palette\_entry@{set\_sprite\_palette\_entry}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_palette\_entry}{set\_sprite\_palette\_entry}}
+{\footnotesize\ttfamily \#define set\+\_\+sprite\+\_\+palette\+\_\+entry(\begin{DoxyParamCaption}\item[{}]{palette, }\item[{}]{entry, }\item[{}]{rgb\+\_\+data }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}{set\+\_\+palette\+\_\+entry}}(1,entry,rgb\+\_\+data)}
+
+\mbox{\Hypertarget{sms_8h_a9f879bd31899f7989f887b6238de24e3}\label{sms_8h_a9f879bd31899f7989f887b6238de24e3}}
+\index{sms.h@{sms.h}!set\_bkg\_palette@{set\_bkg\_palette}}
+\index{set\_bkg\_palette@{set\_bkg\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_palette}{set\_bkg\_palette}}
+{\footnotesize\ttfamily \#define set\+\_\+bkg\+\_\+palette~\mbox{\hyperlink{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}{set\+\_\+palette}}}
+
+\mbox{\Hypertarget{sms_8h_a7d5ed1aed79d8fd2894893d7f6f9b835}\label{sms_8h_a7d5ed1aed79d8fd2894893d7f6f9b835}}
+\index{sms.h@{sms.h}!set\_sprite\_palette@{set\_sprite\_palette}}
+\index{set\_sprite\_palette@{set\_sprite\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_palette}{set\_sprite\_palette}}
+{\footnotesize\ttfamily \#define set\+\_\+sprite\+\_\+palette(\begin{DoxyParamCaption}\item[{}]{first\+\_\+palette, }\item[{}]{nb\+\_\+palettes, }\item[{}]{rgb\+\_\+data }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}{set\+\_\+palette}}(1,1,rgb\+\_\+data)}
+
+\mbox{\Hypertarget{sms_8h_a67f80e65620470b55a4950e2966eb868}\label{sms_8h_a67f80e65620470b55a4950e2966eb868}}
+\index{sms.h@{sms.h}!COMPAT\_PALETTE@{COMPAT\_PALETTE}}
+\index{COMPAT\_PALETTE@{COMPAT\_PALETTE}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{COMPAT\_PALETTE}{COMPAT\_PALETTE}}
+{\footnotesize\ttfamily \#define C\+O\+M\+P\+A\+T\+\_\+\+P\+A\+L\+E\+T\+TE(\begin{DoxyParamCaption}\item[{}]{C0, }\item[{}]{C1, }\item[{}]{C2, }\item[{}]{C3 }\end{DoxyParamCaption})~(((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C3) $<$$<$ 12) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C2) $<$$<$ 8) $\vert$ ((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C1) $<$$<$ 4) $\vert$ (\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})(C0))}
+
+\mbox{\Hypertarget{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}\label{sms_8h_a9a732aec1b7aec7d10a9d76ca4da2064}}
+\index{sms.h@{sms.h}!set\_bkg\_tiles@{set\_bkg\_tiles}}
+\index{set\_bkg\_tiles@{set\_bkg\_tiles}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_tiles}{set\_bkg\_tiles}}
+{\footnotesize\ttfamily \#define set\+\_\+bkg\+\_\+tiles~\mbox{\hyperlink{sms_8h_a7c38b146f77eda84981c06c2271fe116}{set\+\_\+tile\+\_\+map\+\_\+compat}}}
+
+\mbox{\Hypertarget{sms_8h_a429db030287423012f40a6dca81ae7e3}\label{sms_8h_a429db030287423012f40a6dca81ae7e3}}
+\index{sms.h@{sms.h}!set\_win\_tiles@{set\_win\_tiles}}
+\index{set\_win\_tiles@{set\_win\_tiles}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_tiles}{set\_win\_tiles}}
+{\footnotesize\ttfamily \#define set\+\_\+win\+\_\+tiles~\mbox{\hyperlink{sms_8h_a7c38b146f77eda84981c06c2271fe116}{set\+\_\+tile\+\_\+map\+\_\+compat}}}
+
+\mbox{\Hypertarget{sms_8h_a3b7ffab8d64e2c345f03221145a935c0}\label{sms_8h_a3b7ffab8d64e2c345f03221145a935c0}}
+\index{sms.h@{sms.h}!fill\_bkg\_rect@{fill\_bkg\_rect}}
+\index{fill\_bkg\_rect@{fill\_bkg\_rect}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{fill\_bkg\_rect}{fill\_bkg\_rect}}
+{\footnotesize\ttfamily \#define fill\+\_\+bkg\+\_\+rect~\mbox{\hyperlink{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}{fill\+\_\+rect\+\_\+compat}}}
+
+\mbox{\Hypertarget{sms_8h_a5a69a3129f4faa99857a8b3d80db1d4a}\label{sms_8h_a5a69a3129f4faa99857a8b3d80db1d4a}}
+\index{sms.h@{sms.h}!fill\_win\_rect@{fill\_win\_rect}}
+\index{fill\_win\_rect@{fill\_win\_rect}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{fill\_win\_rect}{fill\_win\_rect}}
+{\footnotesize\ttfamily \#define fill\+\_\+win\+\_\+rect~\mbox{\hyperlink{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}{fill\+\_\+rect\+\_\+compat}}}
+
+\mbox{\Hypertarget{sms_8h_abfd70bf31185a4900680977c9fb5a5ec}\label{sms_8h_abfd70bf31185a4900680977c9fb5a5ec}}
+\index{sms.h@{sms.h}!DISABLE\_VBL\_TRANSFER@{DISABLE\_VBL\_TRANSFER}}
+\index{DISABLE\_VBL\_TRANSFER@{DISABLE\_VBL\_TRANSFER}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{DISABLE\_VBL\_TRANSFER}{DISABLE\_VBL\_TRANSFER}}
+{\footnotesize\ttfamily \#define D\+I\+S\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = 0}
+
+Disable shadow O\+AM to V\+R\+AM copy on each V\+Blank \mbox{\Hypertarget{sms_8h_a77d516c9d3f86f100eddea5e0d133a76}\label{sms_8h_a77d516c9d3f86f100eddea5e0d133a76}}
+\index{sms.h@{sms.h}!ENABLE\_VBL\_TRANSFER@{ENABLE\_VBL\_TRANSFER}}
+\index{ENABLE\_VBL\_TRANSFER@{ENABLE\_VBL\_TRANSFER}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{ENABLE\_VBL\_TRANSFER}{ENABLE\_VBL\_TRANSFER}}
+{\footnotesize\ttfamily \#define E\+N\+A\+B\+L\+E\+\_\+\+V\+B\+L\+\_\+\+T\+R\+A\+N\+S\+F\+ER~ \mbox{\hyperlink{sms_8h_a5435fd985412934e96a490e103c6bc49}{\+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base}} = (\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})((\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}})\&\mbox{\hyperlink{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}{shadow\+\_\+\+O\+AM}} $>$$>$ 8)}
+
+Enable shadow O\+AM to V\+R\+AM copy on each V\+Blank \mbox{\Hypertarget{sms_8h_a8b77608c87a9aef65a03531482b2163b}\label{sms_8h_a8b77608c87a9aef65a03531482b2163b}}
+\index{sms.h@{sms.h}!MAX\_HARDWARE\_SPRITES@{MAX\_HARDWARE\_SPRITES}}
+\index{MAX\_HARDWARE\_SPRITES@{MAX\_HARDWARE\_SPRITES}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{MAX\_HARDWARE\_SPRITES}{MAX\_HARDWARE\_SPRITES}}
+{\footnotesize\ttfamily \#define M\+A\+X\+\_\+\+H\+A\+R\+D\+W\+A\+R\+E\+\_\+\+S\+P\+R\+I\+T\+ES~64}
+
+Amount of hardware sprites in O\+AM \mbox{\Hypertarget{sms_8h_adcd40a58f7c7d348d506cc400cd94739}\label{sms_8h_adcd40a58f7c7d348d506cc400cd94739}}
+\index{sms.h@{sms.h}!set\_bkg\_tile\_xy@{set\_bkg\_tile\_xy}}
+\index{set\_bkg\_tile\_xy@{set\_bkg\_tile\_xy}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_tile\_xy}{set\_bkg\_tile\_xy}}
+{\footnotesize\ttfamily \#define set\+\_\+bkg\+\_\+tile\+\_\+xy~\mbox{\hyperlink{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}{set\+\_\+tile\+\_\+xy}}}
+
+\mbox{\Hypertarget{sms_8h_a95d929d964d9988f4dc5a25ed399ae08}\label{sms_8h_a95d929d964d9988f4dc5a25ed399ae08}}
+\index{sms.h@{sms.h}!set\_win\_tile\_xy@{set\_win\_tile\_xy}}
+\index{set\_win\_tile\_xy@{set\_win\_tile\_xy}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_tile\_xy}{set\_win\_tile\_xy}}
+{\footnotesize\ttfamily \#define set\+\_\+win\+\_\+tile\+\_\+xy~\mbox{\hyperlink{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}{set\+\_\+tile\+\_\+xy}}}
+
+\mbox{\Hypertarget{sms_8h_a6eaafdbe6cf1695d30724ce75acb9412}\label{sms_8h_a6eaafdbe6cf1695d30724ce75acb9412}}
+\index{sms.h@{sms.h}!get\_win\_xy\_addr@{get\_win\_xy\_addr}}
+\index{get\_win\_xy\_addr@{get\_win\_xy\_addr}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{get\_win\_xy\_addr}{get\_win\_xy\_addr}}
+{\footnotesize\ttfamily \#define get\+\_\+win\+\_\+xy\+\_\+addr~\mbox{\hyperlink{sms_8h_a66b4bfb8c1ea3005ff01ce040a778e63}{get\+\_\+bkg\+\_\+xy\+\_\+addr}}}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{sms_8h_a9508f919d9482d1d51534ccac212454d}\label{sms_8h_a9508f919d9482d1d51534ccac212454d}}
+\index{sms.h@{sms.h}!int\_handler@{int\_handler}}
+\index{int\_handler@{int\_handler}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{int\_handler}{int\_handler}}
+{\footnotesize\ttfamily typedef void($\ast$ int\+\_\+handler) (void) \mbox{\hyperlink{asm_2types_8h_a7ed081d8dfb6902784b2fc730bbb7f96}{N\+O\+N\+B\+A\+N\+K\+ED}}}
+
+Interrupt handlers
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{sms_8h_a498b148efd22ab8ad9b844b2dc5e5bb8}\label{sms_8h_a498b148efd22ab8ad9b844b2dc5e5bb8}}
+\index{sms.h@{sms.h}!WRITE\_VDP\_CMD@{WRITE\_VDP\_CMD}}
+\index{WRITE\_VDP\_CMD@{WRITE\_VDP\_CMD}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{WRITE\_VDP\_CMD()}{WRITE\_VDP\_CMD()}}
+{\footnotesize\ttfamily void W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+C\+MD (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{cmd }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_aa2ddf9662320c4a9d00fd4a94d347570}\label{sms_8h_aa2ddf9662320c4a9d00fd4a94d347570}}
+\index{sms.h@{sms.h}!WRITE\_VDP\_DATA@{WRITE\_VDP\_DATA}}
+\index{WRITE\_VDP\_DATA@{WRITE\_VDP\_DATA}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{WRITE\_VDP\_DATA()}{WRITE\_VDP\_DATA()}}
+{\footnotesize\ttfamily void W\+R\+I\+T\+E\+\_\+\+V\+D\+P\+\_\+\+D\+A\+TA (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{data }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a3ea524204d839377cf39842eec23e202}\label{sms_8h_a3ea524204d839377cf39842eec23e202}}
+\index{sms.h@{sms.h}!mode@{mode}}
+\index{mode@{mode}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{mode()}{mode()}}
+{\footnotesize\ttfamily void mode (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{m }\end{DoxyParamCaption})}
+
+Set the current screen mode -\/ one of M\+\_\+$\ast$ modes
+
+Normally used by internal functions only.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}, \mbox{\hyperlink{sms_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}, \mbox{\hyperlink{sms_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}, \mbox{\hyperlink{sms_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ad9a83378f5ec1f6444c879e4cf1e1a83}\label{sms_8h_ad9a83378f5ec1f6444c879e4cf1e1a83}}
+\index{sms.h@{sms.h}!get\_mode@{get\_mode}}
+\index{get\_mode@{get\_mode}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{get\_mode()}{get\_mode()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+mode (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns the current mode
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}, \mbox{\hyperlink{gb_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}, \mbox{\hyperlink{gb_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}, \mbox{\hyperlink{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}
+\end{DoxySeeAlso}
+Returns the current mode
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_acc9798fc62b5d626c91c8b0f20b522ff}{M\+\_\+\+D\+R\+A\+W\+I\+NG}}, \mbox{\hyperlink{gb_8h_af0e30d6af308ffe5a025fbe85da40f6f}{M\+\_\+\+T\+E\+X\+T\+\_\+\+O\+UT}}, \mbox{\hyperlink{gb_8h_a908826e7180f94a5988ceb8633313a2e}{M\+\_\+\+T\+E\+X\+T\+\_\+\+I\+N\+O\+UT}}, \mbox{\hyperlink{gb_8h_a04382de20738146fe873ddfb0585052b}{M\+\_\+\+N\+O\+\_\+\+S\+C\+R\+O\+LL}}, \mbox{\hyperlink{gb_8h_aca2855edd2d28f66be551a0f7ec23f07}{M\+\_\+\+N\+O\+\_\+\+I\+N\+T\+E\+RP}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_aefda0091b2934571a11e07b512735f50}\label{sms_8h_aefda0091b2934571a11e07b512735f50}}
+\index{sms.h@{sms.h}!set\_interrupts@{set\_interrupts}}
+\index{set\_interrupts@{set\_interrupts}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_interrupts()}{set\_interrupts()}}
+{\footnotesize\ttfamily void set\+\_\+interrupts (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{flags }\end{DoxyParamCaption})}
+
+Clears any pending interrupts and sets the interrupt mask register IO to flags.
+\begin{DoxyParams}{Parameters}
+{\em flags} & A logical OR of $\ast$\+\_\+\+I\+F\+L\+A\+GS\\
+\hline
+\end{DoxyParams}
+\begin{DoxyNote}{Note}
+\+: This disables and then re-\/enables interrupts so it must be used outside of a critical section.
+\end{DoxyNote}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ae0b13f17609b26c86fc33944aeb6e867}{enable\+\_\+interrupts()}}, \mbox{\hyperlink{gb_8h_ad77796783b3a601b6f3781dfc3983499}{disable\+\_\+interrupts()}}
+
+\mbox{\hyperlink{gb_8h_a2ca7720b9a5da9b2173e1f74dba85541}{V\+B\+L\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a61a9e2910380de6abb34df14ef634eb4}{L\+C\+D\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a604256210ec5b90b68185e1a18efab49}{T\+I\+M\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_ad90564458646c5646b3880b93db3443e}{S\+I\+O\+\_\+\+I\+F\+L\+AG}}, \mbox{\hyperlink{gb_8h_a2f829cf27d6e3e24c875e9b82dfcb280}{J\+O\+Y\+\_\+\+I\+F\+L\+AG}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a98f7ef49e1758c601979bcb0ff19a1f0}\label{sms_8h_a98f7ef49e1758c601979bcb0ff19a1f0}}
+\index{sms.h@{sms.h}!remove\_VBL@{remove\_VBL}}
+\index{remove\_VBL@{remove\_VBL}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{remove\_VBL()}{remove\_VBL()}}
+{\footnotesize\ttfamily void remove\+\_\+\+V\+BL (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the V\+BL interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_ae59628e2237f301df1341e22bfc8296e}{add\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_aa8962b27b960bb0c8d3bb899246c690c}\label{sms_8h_aa8962b27b960bb0c8d3bb899246c690c}}
+\index{sms.h@{sms.h}!remove\_LCD@{remove\_LCD}}
+\index{remove\_LCD@{remove\_LCD}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{remove\_LCD()}{remove\_LCD()}}
+{\footnotesize\ttfamily void remove\+\_\+\+L\+CD (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Removes the L\+CD interrupt handler. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a51add93356a25c71e8c37a73c9065c9d}{add\+\_\+\+L\+C\+D()}}, \mbox{\hyperlink{sms_8h_a98f7ef49e1758c601979bcb0ff19a1f0}{remove\+\_\+\+V\+B\+L()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a98785a1b0ddc91cd8e8c8fab8de1de20}\label{sms_8h_a98785a1b0ddc91cd8e8c8fab8de1de20}}
+\index{sms.h@{sms.h}!remove\_TIM@{remove\_TIM}}
+\index{remove\_TIM@{remove\_TIM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{remove\_TIM()}{remove\_TIM()}}
+{\footnotesize\ttfamily void remove\+\_\+\+T\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a98de9141f407585801fcbf55bf6dcc4c}\label{sms_8h_a98de9141f407585801fcbf55bf6dcc4c}}
+\index{sms.h@{sms.h}!remove\_SIO@{remove\_SIO}}
+\index{remove\_SIO@{remove\_SIO}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{remove\_SIO()}{remove\_SIO()}}
+{\footnotesize\ttfamily void remove\+\_\+\+S\+IO (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a35a3ff12ab34534b763517576afe38a6}\label{sms_8h_a35a3ff12ab34534b763517576afe38a6}}
+\index{sms.h@{sms.h}!remove\_JOY@{remove\_JOY}}
+\index{remove\_JOY@{remove\_JOY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{remove\_JOY()}{remove\_JOY()}}
+{\footnotesize\ttfamily void remove\+\_\+\+J\+OY (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_ae59628e2237f301df1341e22bfc8296e}\label{sms_8h_ae59628e2237f301df1341e22bfc8296e}}
+\index{sms.h@{sms.h}!add\_VBL@{add\_VBL}}
+\index{add\_VBL@{add\_VBL}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{add\_VBL()}{add\_VBL()}}
+{\footnotesize\ttfamily void add\+\_\+\+V\+BL (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a V-\/blank interrupt handler. \mbox{\Hypertarget{sms_8h_a51add93356a25c71e8c37a73c9065c9d}\label{sms_8h_a51add93356a25c71e8c37a73c9065c9d}}
+\index{sms.h@{sms.h}!add\_LCD@{add\_LCD}}
+\index{add\_LCD@{add\_LCD}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{add\_LCD()}{add\_LCD()}}
+{\footnotesize\ttfamily void add\+\_\+\+L\+CD (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Adds a L\+CD interrupt handler. \mbox{\Hypertarget{sms_8h_a6c66a583a8f0744e3985c89725e3dc10}\label{sms_8h_a6c66a583a8f0744e3985c89725e3dc10}}
+\index{sms.h@{sms.h}!add\_TIM@{add\_TIM}}
+\index{add\_TIM@{add\_TIM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{add\_TIM()}{add\_TIM()}}
+{\footnotesize\ttfamily void add\+\_\+\+T\+IM (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_a3372d61a07e0466bdb909a27f3aaaca9}\label{sms_8h_a3372d61a07e0466bdb909a27f3aaaca9}}
+\index{sms.h@{sms.h}!add\_SIO@{add\_SIO}}
+\index{add\_SIO@{add\_SIO}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{add\_SIO()}{add\_SIO()}}
+{\footnotesize\ttfamily void add\+\_\+\+S\+IO (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_a48163816121cd669526817d3e6266fd9}\label{sms_8h_a48163816121cd669526817d3e6266fd9}}
+\index{sms.h@{sms.h}!add\_JOY@{add\_JOY}}
+\index{add\_JOY@{add\_JOY}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{add\_JOY()}{add\_JOY()}}
+{\footnotesize\ttfamily void add\+\_\+\+J\+OY (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{sms_8h_a9508f919d9482d1d51534ccac212454d}{int\+\_\+handler}}}]{h }\end{DoxyParamCaption})}
+
+Does nothing on S\+M\+S/\+GG \mbox{\Hypertarget{sms_8h_ade5d4c955b871b0ed884273cc2b7215a}\label{sms_8h_ade5d4c955b871b0ed884273cc2b7215a}}
+\index{sms.h@{sms.h}!cancel\_pending\_interrupts@{cancel\_pending\_interrupts}}
+\index{cancel\_pending\_interrupts@{cancel\_pending\_interrupts}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{cancel\_pending\_interrupts()}{cancel\_pending\_interrupts()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} cancel\+\_\+pending\+\_\+interrupts (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Cancel pending interrupts \mbox{\Hypertarget{sms_8h_a6261537edc74068e3f7f057e6a3e8a57}\label{sms_8h_a6261537edc74068e3f7f057e6a3e8a57}}
+\index{sms.h@{sms.h}!move\_bkg@{move\_bkg}}
+\index{move\_bkg@{move\_bkg}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{move\_bkg()}{move\_bkg()}}
+{\footnotesize\ttfamily void move\+\_\+bkg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a1f583f7a880daa6145ca78b086a209d1}\label{sms_8h_a1f583f7a880daa6145ca78b086a209d1}}
+\index{sms.h@{sms.h}!scroll\_bkg@{scroll\_bkg}}
+\index{scroll\_bkg@{scroll\_bkg}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{scroll\_bkg()}{scroll\_bkg()}}
+{\footnotesize\ttfamily void scroll\+\_\+bkg (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_acd186eb292d441f9389e77b545a55619}\label{sms_8h_acd186eb292d441f9389e77b545a55619}}
+\index{sms.h@{sms.h}!wait\_vbl\_done@{wait\_vbl\_done}}
+\index{wait\_vbl\_done@{wait\_vbl\_done}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{wait\_vbl\_done()}{wait\_vbl\_done()}}
+{\footnotesize\ttfamily void wait\+\_\+vbl\+\_\+done (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+H\+A\+L\+Ts the C\+PU and waits for the vertical blank interrupt (V\+BL) to finish.
+
+This is often used in main loops to idle the C\+PU at low power until it\textquotesingle{}s time to start the next frame. It\textquotesingle{}s also useful for syncing animation with the screen re-\/draw.
+
+Warning\+: If the V\+BL interrupt is disabled, this function will never return. If the screen is off this function returns immediately. \mbox{\Hypertarget{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}\label{sms_8h_a7b09691f25fddd65f12ed199b3f88ef0}}
+\index{sms.h@{sms.h}!display\_off@{display\_off}}
+\index{display\_off@{display\_off}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{display\_off()}{display\_off()}}
+{\footnotesize\ttfamily void display\+\_\+off (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Turns the display off.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a5ae6b05b3e1559c97f0d1b2daaaa0ee4}{D\+I\+S\+P\+L\+A\+Y\+\_\+\+ON}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a7542d00af674e3c58b6c9887ab01919f}\label{sms_8h_a7542d00af674e3c58b6c9887ab01919f}}
+\index{sms.h@{sms.h}!refresh\_OAM@{refresh\_OAM}}
+\index{refresh\_OAM@{refresh\_OAM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{refresh\_OAM()}{refresh\_OAM()}}
+{\footnotesize\ttfamily void refresh\+\_\+\+O\+AM (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Copies data from shadow O\+AM to O\+AM \mbox{\Hypertarget{sms_8h_a217232c82eb5f99f7639b5786ce5abc6}\label{sms_8h_a217232c82eb5f99f7639b5786ce5abc6}}
+\index{sms.h@{sms.h}!delay@{delay}}
+\index{delay@{delay}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{delay()}{delay()}}
+{\footnotesize\ttfamily void delay (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{d }\end{DoxyParamCaption})}
+
+Delays the given number of milliseconds. Uses no timers or interrupts, and can be called with interrupts disabled \mbox{\Hypertarget{sms_8h_a176c477d759b814664785f3a0ad5e253}\label{sms_8h_a176c477d759b814664785f3a0ad5e253}}
+\index{sms.h@{sms.h}!joypad@{joypad}}
+\index{joypad@{joypad}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{joypad()}{joypad()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypad (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Reads and returns the current state of the joypad. \mbox{\Hypertarget{sms_8h_a79b565677967da5ef9bf1a00aa6776ce}\label{sms_8h_a79b565677967da5ef9bf1a00aa6776ce}}
+\index{sms.h@{sms.h}!waitpad@{waitpad}}
+\index{waitpad@{waitpad}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{waitpad()}{waitpad()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} waitpad (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{mask }\end{DoxyParamCaption})}
+
+Waits until at least one of the buttons given in mask are pressed. \mbox{\Hypertarget{sms_8h_a955d3733e5018f18b17a572aff45cf26}\label{sms_8h_a955d3733e5018f18b17a572aff45cf26}}
+\index{sms.h@{sms.h}!waitpadup@{waitpadup}}
+\index{waitpadup@{waitpadup}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{waitpadup()}{waitpadup()}}
+{\footnotesize\ttfamily void waitpadup (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Waits for the directional pad and all buttons to be released.
+
+Note\+: Checks in a loop that doesn\textquotesingle{}t H\+A\+LT at all, so the C\+PU will be maxed out until this call returns. \mbox{\Hypertarget{sms_8h_abe90cc2b5bb10c0ed9e01e548ddf8862}\label{sms_8h_abe90cc2b5bb10c0ed9e01e548ddf8862}}
+\index{sms.h@{sms.h}!joypad\_init@{joypad\_init}}
+\index{joypad\_init@{joypad\_init}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{joypad\_init()}{joypad\_init()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypad\+\_\+init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{npads, }\item[{\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$}]{joypads }\end{DoxyParamCaption})}
+
+Initializes \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure for polling multiple joypads
+\begin{DoxyParams}{Parameters}
+{\em npads} & number of joypads requested (1, 2 or 4) \\
+\hline
+{\em joypads} & pointer to \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure to be initialized\\
+\hline
+\end{DoxyParams}
+Only required for \mbox{\hyperlink{sms_8h_a1d45c65829490c5ec98362f5e60edc20}{joypad\+\_\+ex}}, not required for calls to regular \mbox{\hyperlink{gb_8h_a176c477d759b814664785f3a0ad5e253}{joypad()}} \begin{DoxyReturn}{Returns}
+number of joypads avaliable
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a1d45c65829490c5ec98362f5e60edc20}{joypad\+\_\+ex()}}, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a1d45c65829490c5ec98362f5e60edc20}\label{sms_8h_a1d45c65829490c5ec98362f5e60edc20}}
+\index{sms.h@{sms.h}!joypad\_ex@{joypad\_ex}}
+\index{joypad\_ex@{joypad\_ex}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{joypad\_ex()}{joypad\_ex()}}
+{\footnotesize\ttfamily void joypad\+\_\+ex (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} $\ast$}]{joypads }\end{DoxyParamCaption})}
+
+Polls all avaliable joypads
+\begin{DoxyParams}{Parameters}
+{\em joypads} & pointer to \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}} structure to be filled with joypad statuses, must be previously initialized with \mbox{\hyperlink{sms_8h_abe90cc2b5bb10c0ed9e01e548ddf8862}{joypad\+\_\+init()}}\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_abe90cc2b5bb10c0ed9e01e548ddf8862}{joypad\+\_\+init()}}, \mbox{\hyperlink{structjoypads__t}{joypads\+\_\+t}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_abd34836339579013c097ae4dea10c014}\label{sms_8h_abd34836339579013c097ae4dea10c014}}
+\index{sms.h@{sms.h}!set\_default\_palette@{set\_default\_palette}}
+\index{set\_default\_palette@{set\_default\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_default\_palette()}{set\_default\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+default\+\_\+palette (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a884a743919b234cd9c37789380784d08}\label{sms_8h_a884a743919b234cd9c37789380784d08}}
+\index{sms.h@{sms.h}!cpu\_fast@{cpu\_fast}}
+\index{cpu\_fast@{cpu\_fast}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{cpu\_fast()}{cpu\_fast()}}
+{\footnotesize\ttfamily void cpu\+\_\+fast (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Set C\+PU speed to fast (C\+GB Double Speed) operation.
+
+On startup the C\+GB operates in Normal Speed Mode and can be switched into Double speed mode (faster processing but also higher power consumption). See the Pan Docs for more information about which hardware features operate faster and which remain at Normal Speed.
+
+\begin{DoxyItemize}
+\item Interrupts are temporarily disabled and then re-\/enabled during this call. \item You can check to see if \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}} == \mbox{\hyperlink{gb_8h_aee435a3a0dde3dbd7b6112dbb456cde8}{C\+G\+B\+\_\+\+T\+Y\+PE}} before using this function.\end{DoxyItemize}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{cgb_8h_a6a36fb9584e4a123f6164530a3b1e5e2}{cpu\+\_\+slow()}}, \mbox{\hyperlink{gb_8h_a874b9bd95b0a05d6a6072feabc879e45}{\+\_\+cpu}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}\label{sms_8h_a2c9aabf4519e01257b0d0e04e8108164}}
+\index{sms.h@{sms.h}!set\_palette\_entry@{set\_palette\_entry}}
+\index{set\_palette\_entry@{set\_palette\_entry}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_palette\_entry()}{set\_palette\_entry()}}
+{\footnotesize\ttfamily void set\+\_\+palette\+\_\+entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{entry, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}\label{sms_8h_a92109adcc20960f26e8bc5fbb141d27e}}
+\index{sms.h@{sms.h}!set\_palette@{set\_palette}}
+\index{set\_palette@{set\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_palette()}{set\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+palette (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{first\+\_\+palette, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb\+\_\+palettes, }\item[{\mbox{\hyperlink{cgb_8h_af868d7cdbd052c6b972ef137e02f6495}{palette\+\_\+color\+\_\+t}} $\ast$}]{rgb\+\_\+data }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a24764a152441b966ea04a83278c73207}\label{sms_8h_a24764a152441b966ea04a83278c73207}}
+\index{sms.h@{sms.h}!set\_native\_tile\_data@{set\_native\_tile\_data}}
+\index{set\_native\_tile\_data@{set\_native\_tile\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_native\_tile\_data()}{set\_native\_tile\_data()}}
+{\footnotesize\ttfamily void set\+\_\+native\+\_\+tile\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_aeff13dca11be49e8c159820c616016ec}\label{sms_8h_aeff13dca11be49e8c159820c616016ec}}
+\index{sms.h@{sms.h}!set\_bkg\_4bpp\_data@{set\_bkg\_4bpp\_data}}
+\index{set\_bkg\_4bpp\_data@{set\_bkg\_4bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_4bpp\_data()}{set\_bkg\_4bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+4bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a24f53cfe7e25c04fbb5dcb08cfb3b432}\label{sms_8h_a24f53cfe7e25c04fbb5dcb08cfb3b432}}
+\index{sms.h@{sms.h}!set\_sprite\_4bpp\_data@{set\_sprite\_4bpp\_data}}
+\index{set\_sprite\_4bpp\_data@{set\_sprite\_4bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_4bpp\_data()}{set\_sprite\_4bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+4bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_aa224c9bac27c7fd268e62bdf33338a84}\label{sms_8h_aa224c9bac27c7fd268e62bdf33338a84}}
+\index{sms.h@{sms.h}!set\_2bpp\_palette@{set\_2bpp\_palette}}
+\index{set\_2bpp\_palette@{set\_2bpp\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_2bpp\_palette()}{set\_2bpp\_palette()}}
+{\footnotesize\ttfamily void set\+\_\+2bpp\+\_\+palette (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{palette }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_ab752b1bb0f58da2a6d52e9747c4b3dd8}\label{sms_8h_ab752b1bb0f58da2a6d52e9747c4b3dd8}}
+\index{sms.h@{sms.h}!set\_tile\_2bpp\_data@{set\_tile\_2bpp\_data}}
+\index{set\_tile\_2bpp\_data@{set\_tile\_2bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_2bpp\_data()}{set\_tile\_2bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+2bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{palette }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a8130306da1177f4fef89e699f8e2add4}\label{sms_8h_a8130306da1177f4fef89e699f8e2add4}}
+\index{sms.h@{sms.h}!set\_bkg\_data@{set\_bkg\_data}}
+\index{set\_bkg\_data@{set\_bkg\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_data()}{set\_bkg\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}\label{sms_8h_a216a3e3d320ee4d8cf4845600487ae39}}
+\index{sms.h@{sms.h}!set\_sprite\_data@{set\_sprite\_data}}
+\index{set\_sprite\_data@{set\_sprite\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_data()}{set\_sprite\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_aa7ba76e4d44dbf19da351fd1ea8e3023}\label{sms_8h_aa7ba76e4d44dbf19da351fd1ea8e3023}}
+\index{sms.h@{sms.h}!set\_bkg\_2bpp\_data@{set\_bkg\_2bpp\_data}}
+\index{set\_bkg\_2bpp\_data@{set\_bkg\_2bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_2bpp\_data()}{set\_bkg\_2bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+2bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a10ee2919fcab7a5c482816ed718d1c4a}\label{sms_8h_a10ee2919fcab7a5c482816ed718d1c4a}}
+\index{sms.h@{sms.h}!set\_sprite\_2bpp\_data@{set\_sprite\_2bpp\_data}}
+\index{set\_sprite\_2bpp\_data@{set\_sprite\_2bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_2bpp\_data()}{set\_sprite\_2bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+2bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_adcb394299a1033616fc7d2faec8bd6ad}\label{sms_8h_adcb394299a1033616fc7d2faec8bd6ad}}
+\index{sms.h@{sms.h}!set\_1bpp\_colors@{set\_1bpp\_colors}}
+\index{set\_1bpp\_colors@{set\_1bpp\_colors}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_1bpp\_colors()}{set\_1bpp\_colors()}}
+{\footnotesize\ttfamily void set\+\_\+1bpp\+\_\+colors (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{fgcolor, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{bgcolor }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a747033606e041b45ae09b38fdb06b871}\label{sms_8h_a747033606e041b45ae09b38fdb06b871}}
+\index{sms.h@{sms.h}!set\_tile\_1bpp\_data@{set\_tile\_1bpp\_data}}
+\index{set\_tile\_1bpp\_data@{set\_tile\_1bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_1bpp\_data()}{set\_tile\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{colors }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}\label{sms_8h_a4d5f74eed0489ebfdc2410ee3f9f7f04}}
+\index{sms.h@{sms.h}!set\_bkg\_1bpp\_data@{set\_bkg\_1bpp\_data}}
+\index{set\_bkg\_1bpp\_data@{set\_bkg\_1bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_1bpp\_data()}{set\_bkg\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a2cc121fbeb5570248531b85a8f0b5b97}\label{sms_8h_a2cc121fbeb5570248531b85a8f0b5b97}}
+\index{sms.h@{sms.h}!set\_sprite\_1bpp\_data@{set\_sprite\_1bpp\_data}}
+\index{set\_sprite\_1bpp\_data@{set\_sprite\_1bpp\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_1bpp\_data()}{set\_sprite\_1bpp\_data()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+1bpp\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{start, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{ntiles, }\item[{const void $\ast$}]{src }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a8fe17423c7ef7c44f1ccff27d3afbebc}\label{sms_8h_a8fe17423c7ef7c44f1ccff27d3afbebc}}
+\index{sms.h@{sms.h}!set\_data@{set\_data}}
+\index{set\_data@{set\_data}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_data()}{set\_data()}}
+{\footnotesize\ttfamily void set\+\_\+data (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{dst, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{size }\end{DoxyParamCaption})}
+
+Copies arbitrary data to an address in V\+R\+AM
+
+
+\begin{DoxyParams}{Parameters}
+{\em dst} & destination V\+R\+AM Address \\
+\hline
+{\em src} & Pointer to source buffer \\
+\hline
+{\em size} & Number of bytes to copy\\
+\hline
+\end{DoxyParams}
+Copies {\bfseries{size}} bytes from a buffer at \+\_\+src\+\_\+\+\_\+ to V\+R\+AM starting at {\bfseries{dst}}. \mbox{\Hypertarget{sms_8h_a33a749b14dfbd203c460e8d7f3500636}\label{sms_8h_a33a749b14dfbd203c460e8d7f3500636}}
+\index{sms.h@{sms.h}!vmemcpy@{vmemcpy}}
+\index{vmemcpy@{vmemcpy}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{vmemcpy()}{vmemcpy()}}
+{\footnotesize\ttfamily void vmemcpy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{dst, }\item[{const void $\ast$}]{src, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{size }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a14fc41e69085b5aa3da2fae9a2aa3ef3}\label{sms_8h_a14fc41e69085b5aa3da2fae9a2aa3ef3}}
+\index{sms.h@{sms.h}!set\_tile\_map@{set\_tile\_map}}
+\index{set\_tile\_map@{set\_tile\_map}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_map()}{set\_tile\_map()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+map (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a7c38b146f77eda84981c06c2271fe116}\label{sms_8h_a7c38b146f77eda84981c06c2271fe116}}
+\index{sms.h@{sms.h}!set\_tile\_map\_compat@{set\_tile\_map\_compat}}
+\index{set\_tile\_map\_compat@{set\_tile\_map\_compat}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_map\_compat()}{set\_tile\_map\_compat()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+map\+\_\+compat (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a811c386cac0df2d260aacb5a43608be5}\label{sms_8h_a811c386cac0df2d260aacb5a43608be5}}
+\index{sms.h@{sms.h}!set\_bkg\_based\_tiles@{set\_bkg\_based\_tiles}}
+\index{set\_bkg\_based\_tiles@{set\_bkg\_based\_tiles}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_based\_tiles()}{set\_bkg\_based\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+based\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a739a212609ae60c9c56c095f96b4ea80}\label{sms_8h_a739a212609ae60c9c56c095f96b4ea80}}
+\index{sms.h@{sms.h}!set\_win\_based\_tiles@{set\_win\_based\_tiles}}
+\index{set\_win\_based\_tiles@{set\_win\_based\_tiles}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_based\_tiles()}{set\_win\_based\_tiles()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+based\+\_\+tiles (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{tiles, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a84774e034fe0e70af62bd17ac716ba34}\label{sms_8h_a84774e034fe0e70af62bd17ac716ba34}}
+\index{sms.h@{sms.h}!set\_tile\_submap@{set\_tile\_submap}}
+\index{set\_tile\_submap@{set\_tile\_submap}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_submap()}{set\_tile\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_aba0308b5e8e154cc920f041a185ac770}\label{sms_8h_aba0308b5e8e154cc920f041a185ac770}}
+\index{sms.h@{sms.h}!set\_tile\_submap\_compat@{set\_tile\_submap\_compat}}
+\index{set\_tile\_submap\_compat@{set\_tile\_submap\_compat}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_submap\_compat()}{set\_tile\_submap\_compat()}}
+{\footnotesize\ttfamily void set\+\_\+tile\+\_\+submap\+\_\+compat (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}\label{sms_8h_a0cfd261bc7a94b1f6093f423bad30298}}
+\index{sms.h@{sms.h}!set\_bkg\_submap@{set\_bkg\_submap}}
+\index{set\_bkg\_submap@{set\_bkg\_submap}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_submap()}{set\_bkg\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Background Tile Map using a sub-\/region from a source tile map. Useful for scrolling implementations of maps larger than 32 x 32 tiles.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Background Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+Entries are copied from {\bfseries{map}} to the Background Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles, using {\bfseries{map\+\_\+w}} as the rowstride for the source tile map.
+
+Use this instead of \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+See \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} for setting C\+GB attribute maps with \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_a8e3f36aa68ac036695816757f2a1322c}{S\+H\+O\+W\+\_\+\+B\+KG}}
+
+\mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_af80befa3cad9cae361c7cf4fffb3a8de}{set\+\_\+win\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_abb50a392ca0d0419a080413287ee5d79}\label{sms_8h_abb50a392ca0d0419a080413287ee5d79}}
+\index{sms.h@{sms.h}!set\_win\_submap@{set\_win\_submap}}
+\index{set\_win\_submap@{set\_win\_submap}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_submap()}{set\_win\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets a rectangular area of the Window Tile Map using a sub-\/region from a source tile map.
+
+
+\begin{DoxyParams}{Parameters}
+{\em x} & X Start position in Window Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em y} & Y Start position in Wimdpw Map tile coordinates. Range 0 -\/ 31 \\
+\hline
+{\em w} & Width of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em h} & Height of area to set in tiles. Range 1 -\/ 255 \\
+\hline
+{\em map} & Pointer to source tile map data \\
+\hline
+{\em map\+\_\+w} & Width of source tile map in tiles. Range 1 -\/ 255\\
+\hline
+\end{DoxyParams}
+Entries are copied from {\bfseries{map}} to the Window Tile Map starting at {\bfseries{x}}, {\bfseries{y}} writing across for {\bfseries{w}} tiles and down for {\bfseries{h}} tiles, using {\bfseries{map\+\_\+w}} as the rowstride for the source tile map.
+
+Use this instead of \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}} when the source map is wider than 32 tiles or when writing a width that does not match the source map width.
+
+One byte per source tile map entry.
+
+Writes that exceed coordinate 31 on the x or y axis will wrap around to the Left and Top edges.
+
+G\+BC only\+: \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}} determines whether Tile Numbers or Tile Attributes get set. \begin{DoxyItemize}
+\item V\+B\+K\+\_\+\+R\+EG=0 Tile Numbers are written \item V\+B\+K\+\_\+\+R\+EG=1 Tile Attributes are written\end{DoxyItemize}
+See \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}} for details about C\+GB attribute maps with \mbox{\hyperlink{gb_2hardware_8h_a5ccae0d556500e1055a0ec8de20c535a}{V\+B\+K\+\_\+\+R\+EG}}.
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{gb_8h_ab19da2ab719bb8897bc0843a84af28f8}{S\+H\+O\+W\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_aedb6e32c42d4b1d25ad11adccd7100c3}{H\+I\+D\+E\+\_\+\+W\+IN}}, \mbox{\hyperlink{gb_8h_a5c59b4ee6323af9832998906d087266b}{set\+\_\+win\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_adb21d1c7d533a7133bab36a845489780}{set\+\_\+bkg\+\_\+submap}}, \mbox{\hyperlink{gb_8h_a6da9e2fa1bafd35363e84ee999909ec7}{set\+\_\+bkg\+\_\+tiles}}, \mbox{\hyperlink{gb_8h_a1f5101f2b7bb0123c26a3e257f843626}{set\+\_\+bkg\+\_\+data}}, \mbox{\hyperlink{gb_8h_a9b205ee302f54cb96ee59aac6d53a91c}{set\+\_\+tiles}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_abc8bc5808620a9717263b8c9ec2237f0}\label{sms_8h_abc8bc5808620a9717263b8c9ec2237f0}}
+\index{sms.h@{sms.h}!set\_bkg\_based\_submap@{set\_bkg\_based\_submap}}
+\index{set\_bkg\_based\_submap@{set\_bkg\_based\_submap}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_bkg\_based\_submap()}{set\_bkg\_based\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+bkg\+\_\+based\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a1b8a1026983cb2b2c0bd46334b4692a0}\label{sms_8h_a1b8a1026983cb2b2c0bd46334b4692a0}}
+\index{sms.h@{sms.h}!set\_win\_based\_submap@{set\_win\_based\_submap}}
+\index{set\_win\_based\_submap@{set\_win\_based\_submap}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_win\_based\_submap()}{set\_win\_based\_submap()}}
+{\footnotesize\ttfamily void set\+\_\+win\+\_\+based\+\_\+submap (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{map, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{map\+\_\+w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{base\+\_\+tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_aba932d128338fb19644842565139a20d}\label{sms_8h_aba932d128338fb19644842565139a20d}}
+\index{sms.h@{sms.h}!fill\_rect@{fill\_rect}}
+\index{fill\_rect@{fill\_rect}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{fill\_rect()}{fill\_rect()}}
+{\footnotesize\ttfamily void fill\+\_\+rect (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{tile }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}\label{sms_8h_af2fc27409f907cfae9583b5ebf0c5ea8}}
+\index{sms.h@{sms.h}!fill\_rect\_compat@{fill\_rect\_compat}}
+\index{fill\_rect\_compat@{fill\_rect\_compat}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{fill\_rect\_compat()}{fill\_rect\_compat()}}
+{\footnotesize\ttfamily void fill\+\_\+rect\+\_\+compat (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{w, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{h, }\item[{const \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{tile }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{sms_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}\label{sms_8h_a7e0cdfd6b9a2ae1b7f30384f132d8687}}
+\index{sms.h@{sms.h}!SET\_SHADOW\_OAM\_ADDRESS@{SET\_SHADOW\_OAM\_ADDRESS}}
+\index{SET\_SHADOW\_OAM\_ADDRESS@{SET\_SHADOW\_OAM\_ADDRESS}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{SET\_SHADOW\_OAM\_ADDRESS()}{SET\_SHADOW\_OAM\_ADDRESS()}}
+{\footnotesize\ttfamily void S\+E\+T\+\_\+\+S\+H\+A\+D\+O\+W\+\_\+\+O\+A\+M\+\_\+\+A\+D\+D\+R\+E\+SS (\begin{DoxyParamCaption}\item[{void $\ast$}]{address }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets address of 256-\/byte aligned array of shadow O\+AM to be transferred on each V\+Blank \mbox{\Hypertarget{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}\label{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}}
+\index{sms.h@{sms.h}!set\_sprite\_tile@{set\_sprite\_tile}}
+\index{set\_sprite\_tile@{set\_sprite\_tile}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_tile()}{set\_sprite\_tile()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+tile (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{tile }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Sets sprite number {\bfseries{nb\+\_\+\+\_\+in the O\+AM to display tile number \+\_\+\+\_\+tile}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em tile} & Selects a tile (0 -\/ 255) from memory at 8000h -\/ 8F\+F\+Fh ~\newline
+ In C\+GB Mode this could be either in V\+R\+AM Bank ~\newline
+ 0 or 1, depending on Bit 3 of the O\+AM Attribute Flag ~\newline
+ (see \mbox{\hyperlink{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}})\\
+\hline
+\end{DoxyParams}
+In 8x16 mode\+: \begin{DoxyItemize}
+\item The sprite will also display the next tile ({\bfseries{tile}} + 1) directly below (y + 8) the first tile. \item The lower bit of the tile number is ignored\+: the upper 8x8 tile is ({\bfseries{tile}} \& 0x\+FE), and the lower 8x8 tile is ({\bfseries{tile}} $\vert$ 0x01). \item See\+: \mbox{\hyperlink{sms_8h_af91d252f07f4764996154820f970c101}{S\+P\+R\+I\+T\+E\+S\+\_\+8x16}} \end{DoxyItemize}
+\mbox{\Hypertarget{sms_8h_af5c0beff7d7a7d8641b51fd95c811b2a}\label{sms_8h_af5c0beff7d7a7d8641b51fd95c811b2a}}
+\index{sms.h@{sms.h}!get\_sprite\_tile@{get\_sprite\_tile}}
+\index{get\_sprite\_tile@{get\_sprite\_tile}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{get\_sprite\_tile()}{get\_sprite\_tile()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+sprite\+\_\+tile (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Returns the tile number of sprite number {\bfseries{nb}} in the O\+AM.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}} for more details
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}\label{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}}
+\index{sms.h@{sms.h}!set\_sprite\_prop@{set\_sprite\_prop}}
+\index{set\_sprite\_prop@{set\_sprite\_prop}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_sprite\_prop()}{set\_sprite\_prop()}}
+{\footnotesize\ttfamily void set\+\_\+sprite\+\_\+prop (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{prop }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_a6b873c807c9e2c90fb574951e85fdf88}\label{sms_8h_a6b873c807c9e2c90fb574951e85fdf88}}
+\index{sms.h@{sms.h}!get\_sprite\_prop@{get\_sprite\_prop}}
+\index{get\_sprite\_prop@{get\_sprite\_prop}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{get\_sprite\_prop()}{get\_sprite\_prop()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} get\+\_\+sprite\+\_\+prop (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+\mbox{\Hypertarget{sms_8h_ab42c12c1d9aed3fd963248fbea9830cd}\label{sms_8h_ab42c12c1d9aed3fd963248fbea9830cd}}
+\index{sms.h@{sms.h}!move\_sprite@{move\_sprite}}
+\index{move\_sprite@{move\_sprite}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{move\_sprite()}{move\_sprite()}}
+{\footnotesize\ttfamily void move\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves sprite number {\bfseries{nb}} to the {\bfseries{x}}, {\bfseries{y}} position on the screen.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em x} & X Position. Specifies the sprites horizontal position on the screen (minus 8). ~\newline
+ An offscreen value (X=0 or X$>$=168) hides the sprite, but the sprite still affects the priority ordering -\/ a better way to hide a sprite is to set its Y-\/coordinate offscreen. \\
+\hline
+{\em y} & Y Position. Specifies the sprites vertical position on the screen (minus 16). ~\newline
+ An offscreen value (for example, Y=0 or Y$>$=160) hides the sprite.\\
+\hline
+\end{DoxyParams}
+Moving the sprite to 0,0 (or similar off-\/screen location) will hide it. \mbox{\Hypertarget{sms_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}\label{sms_8h_a6c59aa9a4f9ea42bed6ca6940b2741fe}}
+\index{sms.h@{sms.h}!scroll\_sprite@{scroll\_sprite}}
+\index{scroll\_sprite@{scroll\_sprite}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{scroll\_sprite()}{scroll\_sprite()}}
+{\footnotesize\ttfamily void scroll\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}]{y }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Moves sprite number {\bfseries{nb}} relative to its current position.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+{\em x} & Number of pixels to move the sprite on the {\bfseries{X axis}} ~\newline
+ Range\+: -\/128 -\/ 127 \\
+\hline
+{\em y} & Number of pixels to move the sprite on the {\bfseries{Y axis}} ~\newline
+ Range\+: -\/128 -\/ 127\\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_ab42c12c1d9aed3fd963248fbea9830cd}{move\+\_\+sprite}} for more details about the X and Y position
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{sms_8h_ad22c51635d052399bbbe1777999c794d}\label{sms_8h_ad22c51635d052399bbbe1777999c794d}}
+\index{sms.h@{sms.h}!hide\_sprite@{hide\_sprite}}
+\index{hide\_sprite@{hide\_sprite}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{hide\_sprite()}{hide\_sprite()}}
+{\footnotesize\ttfamily void hide\+\_\+sprite (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{nb }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
+
+Hides sprite number {\bfseries{nb}} by moving it to zero position by Y.
+
+
+\begin{DoxyParams}{Parameters}
+{\em nb} & Sprite number, range 0 -\/ 39 \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}\label{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}}
+\index{sms.h@{sms.h}!set\_vram\_byte@{set\_vram\_byte}}
+\index{set\_vram\_byte@{set\_vram\_byte}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_vram\_byte()}{set\_vram\_byte()}}
+{\footnotesize\ttfamily void set\+\_\+vram\+\_\+byte (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} $\ast$}]{addr, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{v }\end{DoxyParamCaption})}
+
+Set byte in vram at given memory location
+
+
+\begin{DoxyParams}{Parameters}
+{\em addr} & address to write to \\
+\hline
+{\em v} & value \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{sms_8h_a476f433ea736a1dd610490238f2a6250}\label{sms_8h_a476f433ea736a1dd610490238f2a6250}}
+\index{sms.h@{sms.h}!set\_attributed\_tile\_xy@{set\_attributed\_tile\_xy}}
+\index{set\_attributed\_tile\_xy@{set\_attributed\_tile\_xy}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_attributed\_tile\_xy()}{set\_attributed\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ set\+\_\+attributed\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}]{t }\end{DoxyParamCaption})}
+
+Set single tile t with attributes on background layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+{\em t} & tile index \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns the address of tile, so you may use faster \mbox{\hyperlink{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}{set\+\_\+vram\+\_\+byte()}} later
+\end{DoxyReturn}
+\mbox{\Hypertarget{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}\label{sms_8h_a5834057f6297c0fa8f8e9a6b714f1ff7}}
+\index{sms.h@{sms.h}!set\_tile\_xy@{set\_tile\_xy}}
+\index{set\_tile\_xy@{set\_tile\_xy}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{set\_tile\_xy()}{set\_tile\_xy()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ set\+\_\+tile\+\_\+xy (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{t }\end{DoxyParamCaption})}
+
+Set single tile t on background layer at x,y
+\begin{DoxyParams}{Parameters}
+{\em x} & X-\/coordinate \\
+\hline
+{\em y} & Y-\/coordinate \\
+\hline
+{\em t} & tile index \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+returns the address of tile, so you may use faster \mbox{\hyperlink{sms_8h_afe1bc7117a68cd0939c2d03baaa06b89}{set\+\_\+vram\+\_\+byte()}} later
+\end{DoxyReturn}
+\mbox{\Hypertarget{sms_8h_a66b4bfb8c1ea3005ff01ce040a778e63}\label{sms_8h_a66b4bfb8c1ea3005ff01ce040a778e63}}
+\index{sms.h@{sms.h}!get\_bkg\_xy\_addr@{get\_bkg\_xy\_addr}}
+\index{get\_bkg\_xy\_addr@{get\_bkg\_xy\_addr}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{get\_bkg\_xy\_addr()}{get\_bkg\_xy\_addr()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}$\ast$ get\+\_\+bkg\+\_\+xy\+\_\+addr (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{x, }\item[{\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}]{y }\end{DoxyParamCaption})}
+
+Get address of X,Y tile of background map
+
+\doxysubsubsection{Variable Documentation}
+\mbox{\Hypertarget{sms_8h_a0b3366755f3276b0243c1e0497471b7a}\label{sms_8h_a0b3366755f3276b0243c1e0497471b7a}}
+\index{sms.h@{sms.h}!c@{c}}
+\index{c@{c}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{c}{c}}
+{\footnotesize\ttfamily void c}
+
+\mbox{\Hypertarget{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}\label{sms_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}}
+\index{sms.h@{sms.h}!d@{d}}
+\index{d@{d}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{d}{d}}
+{\footnotesize\ttfamily void d}
+
+\mbox{\Hypertarget{sms_8h_aeda4515a31485c9688c4601ac5ce2d79}\label{sms_8h_aeda4515a31485c9688c4601ac5ce2d79}}
+\index{sms.h@{sms.h}!e@{e}}
+\index{e@{e}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{e}{e}}
+{\footnotesize\ttfamily void e}
+
+\mbox{\Hypertarget{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}\label{sms_8h_aade844cba18122ad48cb2f92b1c87ab0}}
+\index{sms.h@{sms.h}!iyh@{iyh}}
+\index{iyh@{iyh}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{iyh}{iyh}}
+{\footnotesize\ttfamily void iyh}
+
+\mbox{\Hypertarget{sms_8h_af279c752a3b15c4bd5c67f54b92e553f}\label{sms_8h_af279c752a3b15c4bd5c67f54b92e553f}}
+\index{sms.h@{sms.h}!iyl@{iyl}}
+\index{iyl@{iyl}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{iyl}{iyl}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} iyl}
+
+\mbox{\Hypertarget{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}\label{sms_8h_a1f1dfeb2f802fe99f37fe91867b84456}}
+\index{sms.h@{sms.h}!h@{h}}
+\index{h@{h}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{h}{h}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} h}
+
+\mbox{\Hypertarget{sms_8h_af79b920bcb642bba2e652874c4f7eeff}\label{sms_8h_af79b920bcb642bba2e652874c4f7eeff}}
+\index{sms.h@{sms.h}!l@{l}}
+\index{l@{l}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{l}{l}}
+{\footnotesize\ttfamily void l}
+
+\mbox{\Hypertarget{sms_8h_a78d2fd18666afec116f176d46debb4e7}\label{sms_8h_a78d2fd18666afec116f176d46debb4e7}}
+\index{sms.h@{sms.h}!sys\_time@{sys\_time}}
+\index{sys\_time@{sys\_time}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{sys\_time}{sys\_time}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} sys\+\_\+time\hspace{0.3cm}{\ttfamily [extern]}}
+
+Global Time Counter in V\+BL periods (60Hz)
+
+Increments once per Frame
+
+Will wrap around every $\sim$18 minutes (unsigned 16 bits = 65535 / 60 / 60 = 18.\+2) \mbox{\Hypertarget{sms_8h_a22dc57e538f0f49e2dc7d1c73f67fc8f}\label{sms_8h_a22dc57e538f0f49e2dc7d1c73f67fc8f}}
+\index{sms.h@{sms.h}!\_current\_2bpp\_palette@{\_current\_2bpp\_palette}}
+\index{\_current\_2bpp\_palette@{\_current\_2bpp\_palette}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_current\_2bpp\_palette}{\_current\_2bpp\_palette}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \+\_\+current\+\_\+2bpp\+\_\+palette\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_8h_a250f5339e05523912926be566e9eb8c0}\label{sms_8h_a250f5339e05523912926be566e9eb8c0}}
+\index{sms.h@{sms.h}!\_current\_1bpp\_colors@{\_current\_1bpp\_colors}}
+\index{\_current\_1bpp\_colors@{\_current\_1bpp\_colors}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_current\_1bpp\_colors}{\_current\_1bpp\_colors}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \+\_\+current\+\_\+1bpp\+\_\+colors\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_8h_aa82205e9629f984d0b3dc8055c211522}\label{sms_8h_aa82205e9629f984d0b3dc8055c211522}}
+\index{sms.h@{sms.h}!\_map\_tile\_offset@{\_map\_tile\_offset}}
+\index{\_map\_tile\_offset@{\_map\_tile\_offset}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_map\_tile\_offset}{\_map\_tile\_offset}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+map\+\_\+tile\+\_\+offset\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_8h_ab472d9bbb1bcfd141374f5babc71934c}\label{sms_8h_ab472d9bbb1bcfd141374f5babc71934c}}
+\index{sms.h@{sms.h}!\_submap\_tile\_offset@{\_submap\_tile\_offset}}
+\index{\_submap\_tile\_offset@{\_submap\_tile\_offset}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_submap\_tile\_offset}{\_submap\_tile\_offset}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+submap\+\_\+tile\+\_\+offset\hspace{0.3cm}{\ttfamily [extern]}}
+
+\mbox{\Hypertarget{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}\label{sms_8h_af02f9e73bd894cc25e03aedb0a10a91d}}
+\index{sms.h@{sms.h}!shadow\_OAM@{shadow\_OAM}}
+\index{shadow\_OAM@{shadow\_OAM}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{shadow\_OAM}{shadow\_OAM}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} shadow\+\_\+\+O\+AM\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [extern]}}
+
+Shadow O\+AM array in W\+R\+AM, that is transferred into the real O\+AM each V\+Blank \mbox{\Hypertarget{sms_8h_a5435fd985412934e96a490e103c6bc49}\label{sms_8h_a5435fd985412934e96a490e103c6bc49}}
+\index{sms.h@{sms.h}!\_shadow\_OAM\_base@{\_shadow\_OAM\_base}}
+\index{\_shadow\_OAM\_base@{\_shadow\_OAM\_base}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_shadow\_OAM\_base}{\_shadow\_OAM\_base}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+shadow\+\_\+\+O\+A\+M\+\_\+base\hspace{0.3cm}{\ttfamily [extern]}}
+
+M\+SB of shadow\+\_\+\+O\+AM address is used by O\+AM copying routine
+
+M\+SB of shadow\+\_\+\+O\+AM address is used by O\+AM D\+MA copying routine \mbox{\Hypertarget{sms_8h_a388d1dff2698172ba8574e43f5c77c93}\label{sms_8h_a388d1dff2698172ba8574e43f5c77c93}}
+\index{sms.h@{sms.h}!\_shadow\_OAM\_OFF@{\_shadow\_OAM\_OFF}}
+\index{\_shadow\_OAM\_OFF@{\_shadow\_OAM\_OFF}!sms.h@{sms.h}}
+\doxyparagraph{\texorpdfstring{\_shadow\_OAM\_OFF}{\_shadow\_OAM\_OFF}}
+{\footnotesize\ttfamily volatile \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \+\_\+shadow\+\_\+\+O\+A\+M\+\_\+\+O\+FF\hspace{0.3cm}{\ttfamily [extern]}}
+
+Flag for disabling of O\+AM copying routine
+
+Values\+: \begin{DoxyItemize}
+\item 1\+: O\+AM copy routine is disabled (non-\/isr V\+DP operation may be in progress) \item 0\+: O\+AM copy routine is enabled\end{DoxyItemize}
+This flag is modified by all sms/gg G\+B\+DK A\+PI calls that write to the V\+DP. It is set to D\+I\+S\+A\+B\+L\+ED when they start and E\+N\+A\+B\+L\+ED when they complete.
+
+\begin{DoxyNote}{Note}
+It is recommended to avoid writing to the Video Display Processor (V\+DP) during an interrupt service routine (I\+SR) since it can corrupt the V\+DP pointer of an V\+DP operation already in progress.
+\end{DoxyNote}
+If it is necessary, this flag can be used during an I\+SR to determine whether a V\+DP operation is already in progress. If the value is {\ttfamily 1} then avoid writing to the V\+DP (tiles, map, scrolling, colors, etc).
+
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\textcolor{comment}{// at the beginning of and ISR that would write to the VDP}}
+\DoxyCodeLine{\textcolor{keywordflow}{if} (\mbox{\hyperlink{sms_8h_a388d1dff2698172ba8574e43f5c77c93}{\_shadow\_OAM\_OFF}}) \textcolor{keywordflow}{return};}
+\end{DoxyCode}
+
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{docs_supported_consoles_docs_consoles_safe_display_controller_access}{docs\+\_\+consoles\+\_\+safe\+\_\+display\+\_\+controller\+\_\+access}}
+\end{DoxySeeAlso}
diff --git a/docs/latex/stdarg_8h.tex b/docs/latex/stdarg_8h.tex
new file mode 100644
index 00000000..509052df
--- /dev/null
+++ b/docs/latex/stdarg_8h.tex
@@ -0,0 +1,3 @@
+\hypertarget{stdarg_8h}{}\doxysubsection{stdarg.\+h File Reference}
+\label{stdarg_8h}\index{stdarg.h@{stdarg.h}}
+{\ttfamily \#include $<$asm/gbz80/stdarg.\+h$>$}\newline
diff --git a/docs/latex/stdatomic_8h.tex b/docs/latex/stdatomic_8h.tex
new file mode 100644
index 00000000..fd92e7a0
--- /dev/null
+++ b/docs/latex/stdatomic_8h.tex
@@ -0,0 +1,30 @@
+\hypertarget{stdatomic_8h}{}\doxysubsection{stdatomic.\+h File Reference}
+\label{stdatomic_8h}\index{stdatomic.h@{stdatomic.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\+\_\+\+Bool \mbox{\hyperlink{stdatomic_8h_ad301ff71d8b03b0fa2a9207ed00c4ded}{atomic\+\_\+flag\+\_\+test\+\_\+and\+\_\+set}} (volatile \mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}} $\ast$object) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{stdatomic_8h_a281cc77096d886b0cf2c6ab7dfbe900c}{atomic\+\_\+flag\+\_\+clear}} (volatile \mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}} $\ast$object)
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{stdatomic_8h_ad301ff71d8b03b0fa2a9207ed00c4ded}\label{stdatomic_8h_ad301ff71d8b03b0fa2a9207ed00c4ded}}
+\index{stdatomic.h@{stdatomic.h}!atomic\_flag\_test\_and\_set@{atomic\_flag\_test\_and\_set}}
+\index{atomic\_flag\_test\_and\_set@{atomic\_flag\_test\_and\_set}!stdatomic.h@{stdatomic.h}}
+\doxyparagraph{\texorpdfstring{atomic\_flag\_test\_and\_set()}{atomic\_flag\_test\_and\_set()}}
+{\footnotesize\ttfamily \+\_\+\+Bool atomic\+\_\+flag\+\_\+test\+\_\+and\+\_\+set (\begin{DoxyParamCaption}\item[{volatile \mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}} $\ast$}]{object }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{stdatomic_8h_a281cc77096d886b0cf2c6ab7dfbe900c}\label{stdatomic_8h_a281cc77096d886b0cf2c6ab7dfbe900c}}
+\index{stdatomic.h@{stdatomic.h}!atomic\_flag\_clear@{atomic\_flag\_clear}}
+\index{atomic\_flag\_clear@{atomic\_flag\_clear}!stdatomic.h@{stdatomic.h}}
+\doxyparagraph{\texorpdfstring{atomic\_flag\_clear()}{atomic\_flag\_clear()}}
+{\footnotesize\ttfamily void atomic\+\_\+flag\+\_\+clear (\begin{DoxyParamCaption}\item[{volatile \mbox{\hyperlink{structatomic__flag}{atomic\+\_\+flag}} $\ast$}]{object }\end{DoxyParamCaption})}
+
diff --git a/docs/latex/stdbool_8h.tex b/docs/latex/stdbool_8h.tex
new file mode 100644
index 00000000..061734c8
--- /dev/null
+++ b/docs/latex/stdbool_8h.tex
@@ -0,0 +1,40 @@
+\hypertarget{stdbool_8h}{}\doxysubsection{stdbool.\+h File Reference}
+\label{stdbool_8h}\index{stdbool.h@{stdbool.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{stdbool_8h_a41f9c5fb8b08eb5dc3edce4dcb37fee7}{true}}~((\+\_\+\+Bool)+1)
+\item
+\#define \mbox{\hyperlink{stdbool_8h_a65e9886d74aaee76545e83dd09011727}{false}}~((\+\_\+\+Bool)+0)
+\item
+\#define \mbox{\hyperlink{stdbool_8h_abb452686968e48b67397da5f97445f5b}{bool}}~\+\_\+\+Bool
+\item
+\#define \mbox{\hyperlink{stdbool_8h_a665b0cc9ee2ced31785321d55cde349e}{\+\_\+\+\_\+bool\+\_\+true\+\_\+false\+\_\+are\+\_\+defined}}~1
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{stdbool_8h_a41f9c5fb8b08eb5dc3edce4dcb37fee7}\label{stdbool_8h_a41f9c5fb8b08eb5dc3edce4dcb37fee7}}
+\index{stdbool.h@{stdbool.h}!true@{true}}
+\index{true@{true}!stdbool.h@{stdbool.h}}
+\doxyparagraph{\texorpdfstring{true}{true}}
+{\footnotesize\ttfamily \#define true~((\+\_\+\+Bool)+1)}
+
+\mbox{\Hypertarget{stdbool_8h_a65e9886d74aaee76545e83dd09011727}\label{stdbool_8h_a65e9886d74aaee76545e83dd09011727}}
+\index{stdbool.h@{stdbool.h}!false@{false}}
+\index{false@{false}!stdbool.h@{stdbool.h}}
+\doxyparagraph{\texorpdfstring{false}{false}}
+{\footnotesize\ttfamily \#define false~((\+\_\+\+Bool)+0)}
+
+\mbox{\Hypertarget{stdbool_8h_abb452686968e48b67397da5f97445f5b}\label{stdbool_8h_abb452686968e48b67397da5f97445f5b}}
+\index{stdbool.h@{stdbool.h}!bool@{bool}}
+\index{bool@{bool}!stdbool.h@{stdbool.h}}
+\doxyparagraph{\texorpdfstring{bool}{bool}}
+{\footnotesize\ttfamily \#define bool~\+\_\+\+Bool}
+
+\mbox{\Hypertarget{stdbool_8h_a665b0cc9ee2ced31785321d55cde349e}\label{stdbool_8h_a665b0cc9ee2ced31785321d55cde349e}}
+\index{stdbool.h@{stdbool.h}!\_\_bool\_true\_false\_are\_defined@{\_\_bool\_true\_false\_are\_defined}}
+\index{\_\_bool\_true\_false\_are\_defined@{\_\_bool\_true\_false\_are\_defined}!stdbool.h@{stdbool.h}}
+\doxyparagraph{\texorpdfstring{\_\_bool\_true\_false\_are\_defined}{\_\_bool\_true\_false\_are\_defined}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+bool\+\_\+true\+\_\+false\+\_\+are\+\_\+defined~1}
+
diff --git a/docs/latex/stddef_8h.tex b/docs/latex/stddef_8h.tex
new file mode 100644
index 00000000..fbd8ddb9
--- /dev/null
+++ b/docs/latex/stddef_8h.tex
@@ -0,0 +1,78 @@
+\hypertarget{stddef_8h}{}\doxysubsection{stddef.\+h File Reference}
+\label{stddef_8h}\index{stddef.h@{stddef.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{stddef_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}{N\+U\+LL}}~(void $\ast$)0
+\item
+\#define \mbox{\hyperlink{stddef_8h_a9e3909fa823b8c4e3fc624d77fb946bf}{\+\_\+\+\_\+\+P\+T\+R\+D\+I\+F\+F\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}}
+\item
+\#define \mbox{\hyperlink{stddef_8h_a8de3167f7b52ff5a2f538858cb5e32d3}{\+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}}
+\item
+\#define \mbox{\hyperlink{stddef_8h_a4aa39aaff620f750e11ece0766b185fd}{\+\_\+\+\_\+\+W\+C\+H\+A\+R\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}}
+\item
+\#define \mbox{\hyperlink{stddef_8h_ad89ebe5fe5ad08c683f0871118ea8e2f}{offsetof}}(s, m)~\+\_\+\+\_\+builtin\+\_\+offsetof (s, m)
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef int \mbox{\hyperlink{stddef_8h_afbe679a40a36da5983ebc5b39754c065}{ptrdiff\+\_\+t}}
+\item
+typedef unsigned int \mbox{\hyperlink{stddef_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}
+\item
+typedef unsigned long int \mbox{\hyperlink{stddef_8h_a88ca3e0156f8101475a589ae3cbd98c8}{wchar\+\_\+t}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{stddef_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}\label{stddef_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}}
+\index{stddef.h@{stddef.h}!NULL@{NULL}}
+\index{NULL@{NULL}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{NULL}{NULL}}
+{\footnotesize\ttfamily \#define N\+U\+LL~(void $\ast$)0}
+
+\mbox{\Hypertarget{stddef_8h_a9e3909fa823b8c4e3fc624d77fb946bf}\label{stddef_8h_a9e3909fa823b8c4e3fc624d77fb946bf}}
+\index{stddef.h@{stddef.h}!\_\_PTRDIFF\_T\_DEFINED@{\_\_PTRDIFF\_T\_DEFINED}}
+\index{\_\_PTRDIFF\_T\_DEFINED@{\_\_PTRDIFF\_T\_DEFINED}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{\_\_PTRDIFF\_T\_DEFINED}{\_\_PTRDIFF\_T\_DEFINED}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+P\+T\+R\+D\+I\+F\+F\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}
+
+\mbox{\Hypertarget{stddef_8h_a8de3167f7b52ff5a2f538858cb5e32d3}\label{stddef_8h_a8de3167f7b52ff5a2f538858cb5e32d3}}
+\index{stddef.h@{stddef.h}!\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}}
+\index{\_\_SIZE\_T\_DEFINED@{\_\_SIZE\_T\_DEFINED}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{\_\_SIZE\_T\_DEFINED}{\_\_SIZE\_T\_DEFINED}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+S\+I\+Z\+E\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}
+
+\mbox{\Hypertarget{stddef_8h_a4aa39aaff620f750e11ece0766b185fd}\label{stddef_8h_a4aa39aaff620f750e11ece0766b185fd}}
+\index{stddef.h@{stddef.h}!\_\_WCHAR\_T\_DEFINED@{\_\_WCHAR\_T\_DEFINED}}
+\index{\_\_WCHAR\_T\_DEFINED@{\_\_WCHAR\_T\_DEFINED}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{\_\_WCHAR\_T\_DEFINED}{\_\_WCHAR\_T\_DEFINED}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+W\+C\+H\+A\+R\+\_\+\+T\+\_\+\+D\+E\+F\+I\+N\+ED}
+
+\mbox{\Hypertarget{stddef_8h_ad89ebe5fe5ad08c683f0871118ea8e2f}\label{stddef_8h_ad89ebe5fe5ad08c683f0871118ea8e2f}}
+\index{stddef.h@{stddef.h}!offsetof@{offsetof}}
+\index{offsetof@{offsetof}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{offsetof}{offsetof}}
+{\footnotesize\ttfamily \#define offsetof(\begin{DoxyParamCaption}\item[{}]{s, }\item[{}]{m }\end{DoxyParamCaption})~\+\_\+\+\_\+builtin\+\_\+offsetof (s, m)}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{stddef_8h_afbe679a40a36da5983ebc5b39754c065}\label{stddef_8h_afbe679a40a36da5983ebc5b39754c065}}
+\index{stddef.h@{stddef.h}!ptrdiff\_t@{ptrdiff\_t}}
+\index{ptrdiff\_t@{ptrdiff\_t}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{ptrdiff\_t}{ptrdiff\_t}}
+{\footnotesize\ttfamily typedef int \mbox{\hyperlink{stddef_8h_afbe679a40a36da5983ebc5b39754c065}{ptrdiff\+\_\+t}}}
+
+\mbox{\Hypertarget{stddef_8h_a7c94ea6f8948649f8d181ae55911eeaf}\label{stddef_8h_a7c94ea6f8948649f8d181ae55911eeaf}}
+\index{stddef.h@{stddef.h}!size\_t@{size\_t}}
+\index{size\_t@{size\_t}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{size\_t}{size\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}
+
+\mbox{\Hypertarget{stddef_8h_a88ca3e0156f8101475a589ae3cbd98c8}\label{stddef_8h_a88ca3e0156f8101475a589ae3cbd98c8}}
+\index{stddef.h@{stddef.h}!wchar\_t@{wchar\_t}}
+\index{wchar\_t@{wchar\_t}!stddef.h@{stddef.h}}
+\doxyparagraph{\texorpdfstring{wchar\_t}{wchar\_t}}
+{\footnotesize\ttfamily typedef unsigned long int \mbox{\hyperlink{stddef_8h_a88ca3e0156f8101475a589ae3cbd98c8}{wchar\+\_\+t}}}
+
diff --git a/docs/latex/stdint_8h.tex b/docs/latex/stdint_8h.tex
new file mode 100644
index 00000000..4f168a86
--- /dev/null
+++ b/docs/latex/stdint_8h.tex
@@ -0,0 +1,590 @@
+\hypertarget{stdint_8h}{}\doxysubsection{stdint.\+h File Reference}
+\label{stdint_8h}\index{stdint.h@{stdint.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}{I\+N\+T8\+\_\+\+M\+IN}}~(-\/128)
+\item
+\#define \mbox{\hyperlink{stdint_8h_ad4e9955955b27624963643eac448118a}{I\+N\+T16\+\_\+\+M\+IN}}~(-\/32767-\/1)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}{I\+N\+T32\+\_\+\+M\+IN}}~(-\/2147483647L-\/1)
+\item
+\#define \mbox{\hyperlink{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}{I\+N\+T8\+\_\+\+M\+AX}}~(127)
+\item
+\#define \mbox{\hyperlink{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}{I\+N\+T16\+\_\+\+M\+AX}}~(32767)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a181807730d4a375f848ba139813ce04f}{I\+N\+T32\+\_\+\+M\+AX}}~(2147483647L)
+\item
+\#define \mbox{\hyperlink{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}{U\+I\+N\+T8\+\_\+\+M\+AX}}~(255)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}{U\+I\+N\+T16\+\_\+\+M\+AX}}~(65535)
+\item
+\#define \mbox{\hyperlink{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}{U\+I\+N\+T32\+\_\+\+M\+AX}}~(4294967295UL)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a3e986cad833f63f420962ff60eda87e5}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}{I\+N\+T8\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a1f91bfd5820c2f27af3d260fc75813e1}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_ad4e9955955b27624963643eac448118a}{I\+N\+T16\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2360a536116dd734820a6b5b3d560ce7}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}{I\+N\+T32\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_aa05109908fb2770f632d2b646b9f85bf}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}{I\+N\+T8\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a7eb2a8e2a1c65d6c9ad0f86154890baa}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}{I\+N\+T16\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a5618711a0a54f722190a3a1219e278c2}{I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_a181807730d4a375f848ba139813ce04f}{I\+N\+T32\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2a80bde77ee1698d0f42f334adad4f2b}{U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}{U\+I\+N\+T8\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a6ef6a1a518bbf516ca8b0180b11c358f}{U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}{U\+I\+N\+T16\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a70cad8bacc9a6db301e1cdc86cc8d571}{U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}{U\+I\+N\+T32\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_aad8fb982cb19143efd5ee9a1a7a89390}{I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}{I\+N\+T8\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a169460a4e2a79138723d68d99372d958}{I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_ad4e9955955b27624963643eac448118a}{I\+N\+T16\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_ad93df1652ed0635513d5efe4f1219926}{I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+IN}}~\mbox{\hyperlink{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}{I\+N\+T32\+\_\+\+M\+IN}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_acbcdb3bee0f5f904da5df8de69a80ca3}{I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}{I\+N\+T8\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2fd35d0ea091e04caec504ff0042cf00}{I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}{I\+N\+T16\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_ac96fa0f41b19e89f109e4f9913ca6635}{I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_a181807730d4a375f848ba139813ce04f}{I\+N\+T32\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2c6f97ea2d76d0cf6260c84046cdb44e}{U\+I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}{U\+I\+N\+T8\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_aed28ca63d9b222f6f1377358fe73a183}{U\+I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}{U\+I\+N\+T16\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_ad51246a178143208b2db3315efd21c45}{U\+I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+AX}}~\mbox{\hyperlink{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}{U\+I\+N\+T32\+\_\+\+M\+AX}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2aaa6d3aa1d7d1e0e326955aa24db752}{I\+N\+T\+P\+T\+R\+\_\+\+M\+IN}}~(-\/32767-\/1)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a9e5742f2bae4a5283431a3c03499e3a9}{I\+N\+T\+P\+T\+R\+\_\+\+M\+AX}}~(32767)
+\item
+\#define \mbox{\hyperlink{stdint_8h_ab2355300ea19395357e62d780f4dd073}{U\+I\+N\+T\+P\+T\+R\+\_\+\+M\+AX}}~(65535)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2b0a3edfc672154f606dc3ad26277b61}{I\+N\+T\+M\+A\+X\+\_\+\+M\+IN}}~(-\/2147483647L-\/1)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a022b9b0a3564d786244a4631847c37a3}{I\+N\+T\+M\+A\+X\+\_\+\+M\+AX}}~(2147483647L)
+\item
+\#define \mbox{\hyperlink{stdint_8h_aa54fd5210434219e9027bfa0f0e325c8}{U\+I\+N\+T\+M\+A\+X\+\_\+\+M\+AX}}~(4294967295UL)
+\item
+\#define \mbox{\hyperlink{stdint_8h_ad9b88ba2fb858f98b50b38e49875d90e}{P\+T\+R\+D\+I\+F\+F\+\_\+\+M\+IN}}~(-\/32767-\/1)
+\item
+\#define \mbox{\hyperlink{stdint_8h_add2ef7bffac19cfdd1f4b5495409672f}{P\+T\+R\+D\+I\+F\+F\+\_\+\+M\+AX}}~(32767)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a21e605b9ac3a03b6de93cdf5a69e129f}{S\+I\+G\+\_\+\+A\+T\+O\+M\+I\+C\+\_\+\+M\+IN}}~(0)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a1f5fe9445d0ad0bee21bab1de4cc3e58}{S\+I\+G\+\_\+\+A\+T\+O\+M\+I\+C\+\_\+\+M\+AX}}~(255)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a3c75bb398badb69c7577b21486f9963f}{S\+I\+Z\+E\+\_\+\+M\+AX}}~(65535u)
+\item
+\#define \mbox{\hyperlink{stdint_8h_a6b76c8f233c61e6ea05b19b59a6e3549}{I\+N\+T8\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_ae80ec61658b3f58afc31ee67ccd27805}{I\+N\+T16\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}
+\item
+\#define \mbox{\hyperlink{stdint_8h_a5391a63e4d2c8c8a39b3c6f8fdbd8763}{I\+N\+T32\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# L
+\item
+\#define \mbox{\hyperlink{stdint_8h_af77373faf472a16283aad2014724192d}{U\+I\+N\+T8\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# U
+\item
+\#define \mbox{\hyperlink{stdint_8h_af525dddf7f072ee85c953107123ff1f6}{U\+I\+N\+T16\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# U
+\item
+\#define \mbox{\hyperlink{stdint_8h_a87b9ec7df1524edf020b074bbae32d6d}{U\+I\+N\+T32\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# UL
+\item
+\#define \mbox{\hyperlink{stdint_8h_a051084d5ebcabf282d9ca9bb2b891a78}{W\+C\+H\+A\+R\+\_\+\+M\+IN}}~0
+\item
+\#define \mbox{\hyperlink{stdint_8h_a2a823f3ccf2306cfbaa34d8addf66010}{W\+C\+H\+A\+R\+\_\+\+M\+AX}}~0xffffffff
+\item
+\#define \mbox{\hyperlink{stdint_8h_a5285bc55170ae1701e599decacc7f001}{W\+I\+N\+T\+\_\+\+M\+IN}}~0
+\item
+\#define \mbox{\hyperlink{stdint_8h_ad3f7b6bb8aa7d619017a91d3b2edc1ee}{W\+I\+N\+T\+\_\+\+M\+AX}}~0xffffffff
+\item
+\#define \mbox{\hyperlink{stdint_8h_a1b955596bdc3e4b6ef339f16e468d55f}{I\+N\+T\+M\+A\+X\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# L
+\item
+\#define \mbox{\hyperlink{stdint_8h_a00d3f5dd8a8cbd9433d74390bfb2ecef}{U\+I\+N\+T\+M\+A\+X\+\_\+C}}(\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# UL
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef signed char \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}
+\item
+typedef short int \mbox{\hyperlink{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}{int16\+\_\+t}}
+\item
+typedef long int \mbox{\hyperlink{stdint_8h_a7cf4a942912b990a96c39f9a2b81aa32}{int32\+\_\+t}}
+\item
+typedef unsigned char \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}
+\item
+typedef unsigned short int \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}
+\item
+typedef unsigned long int \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}}
+\item
+typedef signed char \mbox{\hyperlink{stdint_8h_ae04fa5ea5ad475bfe428842a986fbf28}{int\+\_\+least8\+\_\+t}}
+\item
+typedef short int \mbox{\hyperlink{stdint_8h_a3379485af1661b4f36ac1c311832253b}{int\+\_\+least16\+\_\+t}}
+\item
+typedef long int \mbox{\hyperlink{stdint_8h_a50d1c7c0834558a78588e1d6d0f62a1d}{int\+\_\+least32\+\_\+t}}
+\item
+typedef unsigned char \mbox{\hyperlink{stdint_8h_ab0fdd2a9dc9606590ecccc0a5d8b5b7c}{uint\+\_\+least8\+\_\+t}}
+\item
+typedef unsigned short int \mbox{\hyperlink{stdint_8h_a1bae72af13d35bac8eb9424db7e27bf1}{uint\+\_\+least16\+\_\+t}}
+\item
+typedef unsigned long int \mbox{\hyperlink{stdint_8h_a1c0bb513299dbdffa1cce4277593b3ce}{uint\+\_\+least32\+\_\+t}}
+\item
+typedef signed char \mbox{\hyperlink{stdint_8h_afa981e0352f65c207364c9cb82246b53}{int\+\_\+fast8\+\_\+t}}
+\item
+typedef int \mbox{\hyperlink{stdint_8h_afc08556e35ad5fc42968cf164e7852d4}{int\+\_\+fast16\+\_\+t}}
+\item
+typedef long int \mbox{\hyperlink{stdint_8h_a21402dabb3274e5161a34a27ccff50db}{int\+\_\+fast32\+\_\+t}}
+\item
+typedef unsigned char \mbox{\hyperlink{stdint_8h_a2d31063fef649c85396fb28130ef9795}{uint\+\_\+fast8\+\_\+t}}
+\item
+typedef unsigned int \mbox{\hyperlink{stdint_8h_a226d967fb6d06433caf43f20dc876aae}{uint\+\_\+fast16\+\_\+t}}
+\item
+typedef unsigned long int \mbox{\hyperlink{stdint_8h_a8a5d6c5353ff297fd0797e654772361b}{uint\+\_\+fast32\+\_\+t}}
+\item
+typedef int \mbox{\hyperlink{stdint_8h_a0fbe4a4f8dd857ee04923a901f27465f}{intptr\+\_\+t}}
+\item
+typedef unsigned int \mbox{\hyperlink{stdint_8h_a728e973c799f206f0151c8a3bd1e5699}{uintptr\+\_\+t}}
+\item
+typedef long int \mbox{\hyperlink{stdint_8h_aa8722f97ae26d6aeff0fd4ebba7de7e4}{intmax\+\_\+t}}
+\item
+typedef unsigned long int \mbox{\hyperlink{stdint_8h_a21649560c6e8dce6de2fb6a95f1bf802}{uintmax\+\_\+t}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}\label{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}}
+\index{stdint.h@{stdint.h}!INT8\_MIN@{INT8\_MIN}}
+\index{INT8\_MIN@{INT8\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT8\_MIN}{INT8\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T8\+\_\+\+M\+IN~(-\/128)}
+
+\mbox{\Hypertarget{stdint_8h_ad4e9955955b27624963643eac448118a}\label{stdint_8h_ad4e9955955b27624963643eac448118a}}
+\index{stdint.h@{stdint.h}!INT16\_MIN@{INT16\_MIN}}
+\index{INT16\_MIN@{INT16\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT16\_MIN}{INT16\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T16\+\_\+\+M\+IN~(-\/32767-\/1)}
+
+\mbox{\Hypertarget{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}\label{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}}
+\index{stdint.h@{stdint.h}!INT32\_MIN@{INT32\_MIN}}
+\index{INT32\_MIN@{INT32\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT32\_MIN}{INT32\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T32\+\_\+\+M\+IN~(-\/2147483647L-\/1)}
+
+\mbox{\Hypertarget{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}\label{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}}
+\index{stdint.h@{stdint.h}!INT8\_MAX@{INT8\_MAX}}
+\index{INT8\_MAX@{INT8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT8\_MAX}{INT8\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T8\+\_\+\+M\+AX~(127)}
+
+\mbox{\Hypertarget{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}\label{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}}
+\index{stdint.h@{stdint.h}!INT16\_MAX@{INT16\_MAX}}
+\index{INT16\_MAX@{INT16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT16\_MAX}{INT16\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T16\+\_\+\+M\+AX~(32767)}
+
+\mbox{\Hypertarget{stdint_8h_a181807730d4a375f848ba139813ce04f}\label{stdint_8h_a181807730d4a375f848ba139813ce04f}}
+\index{stdint.h@{stdint.h}!INT32\_MAX@{INT32\_MAX}}
+\index{INT32\_MAX@{INT32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT32\_MAX}{INT32\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T32\+\_\+\+M\+AX~(2147483647L)}
+
+\mbox{\Hypertarget{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}\label{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}}
+\index{stdint.h@{stdint.h}!UINT8\_MAX@{UINT8\_MAX}}
+\index{UINT8\_MAX@{UINT8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT8\_MAX}{UINT8\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T8\+\_\+\+M\+AX~(255)}
+
+\mbox{\Hypertarget{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}\label{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}}
+\index{stdint.h@{stdint.h}!UINT16\_MAX@{UINT16\_MAX}}
+\index{UINT16\_MAX@{UINT16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT16\_MAX}{UINT16\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T16\+\_\+\+M\+AX~(65535)}
+
+\mbox{\Hypertarget{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}\label{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}}
+\index{stdint.h@{stdint.h}!UINT32\_MAX@{UINT32\_MAX}}
+\index{UINT32\_MAX@{UINT32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT32\_MAX}{UINT32\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T32\+\_\+\+M\+AX~(4294967295UL)}
+
+\mbox{\Hypertarget{stdint_8h_a3e986cad833f63f420962ff60eda87e5}\label{stdint_8h_a3e986cad833f63f420962ff60eda87e5}}
+\index{stdint.h@{stdint.h}!INT\_LEAST8\_MIN@{INT\_LEAST8\_MIN}}
+\index{INT\_LEAST8\_MIN@{INT\_LEAST8\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST8\_MIN}{INT\_LEAST8\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}{I\+N\+T8\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_a1f91bfd5820c2f27af3d260fc75813e1}\label{stdint_8h_a1f91bfd5820c2f27af3d260fc75813e1}}
+\index{stdint.h@{stdint.h}!INT\_LEAST16\_MIN@{INT\_LEAST16\_MIN}}
+\index{INT\_LEAST16\_MIN@{INT\_LEAST16\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST16\_MIN}{INT\_LEAST16\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_ad4e9955955b27624963643eac448118a}{I\+N\+T16\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_a2360a536116dd734820a6b5b3d560ce7}\label{stdint_8h_a2360a536116dd734820a6b5b3d560ce7}}
+\index{stdint.h@{stdint.h}!INT\_LEAST32\_MIN@{INT\_LEAST32\_MIN}}
+\index{INT\_LEAST32\_MIN@{INT\_LEAST32\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST32\_MIN}{INT\_LEAST32\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}{I\+N\+T32\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_aa05109908fb2770f632d2b646b9f85bf}\label{stdint_8h_aa05109908fb2770f632d2b646b9f85bf}}
+\index{stdint.h@{stdint.h}!INT\_LEAST8\_MAX@{INT\_LEAST8\_MAX}}
+\index{INT\_LEAST8\_MAX@{INT\_LEAST8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST8\_MAX}{INT\_LEAST8\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}{I\+N\+T8\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a7eb2a8e2a1c65d6c9ad0f86154890baa}\label{stdint_8h_a7eb2a8e2a1c65d6c9ad0f86154890baa}}
+\index{stdint.h@{stdint.h}!INT\_LEAST16\_MAX@{INT\_LEAST16\_MAX}}
+\index{INT\_LEAST16\_MAX@{INT\_LEAST16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST16\_MAX}{INT\_LEAST16\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}{I\+N\+T16\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a5618711a0a54f722190a3a1219e278c2}\label{stdint_8h_a5618711a0a54f722190a3a1219e278c2}}
+\index{stdint.h@{stdint.h}!INT\_LEAST32\_MAX@{INT\_LEAST32\_MAX}}
+\index{INT\_LEAST32\_MAX@{INT\_LEAST32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_LEAST32\_MAX}{INT\_LEAST32\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_a181807730d4a375f848ba139813ce04f}{I\+N\+T32\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a2a80bde77ee1698d0f42f334adad4f2b}\label{stdint_8h_a2a80bde77ee1698d0f42f334adad4f2b}}
+\index{stdint.h@{stdint.h}!UINT\_LEAST8\_MAX@{UINT\_LEAST8\_MAX}}
+\index{UINT\_LEAST8\_MAX@{UINT\_LEAST8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_LEAST8\_MAX}{UINT\_LEAST8\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T8\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}{U\+I\+N\+T8\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a6ef6a1a518bbf516ca8b0180b11c358f}\label{stdint_8h_a6ef6a1a518bbf516ca8b0180b11c358f}}
+\index{stdint.h@{stdint.h}!UINT\_LEAST16\_MAX@{UINT\_LEAST16\_MAX}}
+\index{UINT\_LEAST16\_MAX@{UINT\_LEAST16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_LEAST16\_MAX}{UINT\_LEAST16\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T16\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}{U\+I\+N\+T16\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a70cad8bacc9a6db301e1cdc86cc8d571}\label{stdint_8h_a70cad8bacc9a6db301e1cdc86cc8d571}}
+\index{stdint.h@{stdint.h}!UINT\_LEAST32\_MAX@{UINT\_LEAST32\_MAX}}
+\index{UINT\_LEAST32\_MAX@{UINT\_LEAST32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_LEAST32\_MAX}{UINT\_LEAST32\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+L\+E\+A\+S\+T32\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}{U\+I\+N\+T32\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_aad8fb982cb19143efd5ee9a1a7a89390}\label{stdint_8h_aad8fb982cb19143efd5ee9a1a7a89390}}
+\index{stdint.h@{stdint.h}!INT\_FAST8\_MIN@{INT\_FAST8\_MIN}}
+\index{INT\_FAST8\_MIN@{INT\_FAST8\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST8\_MIN}{INT\_FAST8\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_aadcf2a81af243df333b31efa6461ab8e}{I\+N\+T8\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_a169460a4e2a79138723d68d99372d958}\label{stdint_8h_a169460a4e2a79138723d68d99372d958}}
+\index{stdint.h@{stdint.h}!INT\_FAST16\_MIN@{INT\_FAST16\_MIN}}
+\index{INT\_FAST16\_MIN@{INT\_FAST16\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST16\_MIN}{INT\_FAST16\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_ad4e9955955b27624963643eac448118a}{I\+N\+T16\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_ad93df1652ed0635513d5efe4f1219926}\label{stdint_8h_ad93df1652ed0635513d5efe4f1219926}}
+\index{stdint.h@{stdint.h}!INT\_FAST32\_MIN@{INT\_FAST32\_MIN}}
+\index{INT\_FAST32\_MIN@{INT\_FAST32\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST32\_MIN}{INT\_FAST32\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+IN~\mbox{\hyperlink{stdint_8h_a688eb21a22db27c2b2bd5836943cdcbe}{I\+N\+T32\+\_\+\+M\+IN}}}
+
+\mbox{\Hypertarget{stdint_8h_acbcdb3bee0f5f904da5df8de69a80ca3}\label{stdint_8h_acbcdb3bee0f5f904da5df8de69a80ca3}}
+\index{stdint.h@{stdint.h}!INT\_FAST8\_MAX@{INT\_FAST8\_MAX}}
+\index{INT\_FAST8\_MAX@{INT\_FAST8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST8\_MAX}{INT\_FAST8\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_aaf7f29f45f1a513b4748a4e5014ddf6a}{I\+N\+T8\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a2fd35d0ea091e04caec504ff0042cf00}\label{stdint_8h_a2fd35d0ea091e04caec504ff0042cf00}}
+\index{stdint.h@{stdint.h}!INT\_FAST16\_MAX@{INT\_FAST16\_MAX}}
+\index{INT\_FAST16\_MAX@{INT\_FAST16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST16\_MAX}{INT\_FAST16\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_ac58f2c111cc9989c86db2a7dc4fd84ca}{I\+N\+T16\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_ac96fa0f41b19e89f109e4f9913ca6635}\label{stdint_8h_ac96fa0f41b19e89f109e4f9913ca6635}}
+\index{stdint.h@{stdint.h}!INT\_FAST32\_MAX@{INT\_FAST32\_MAX}}
+\index{INT\_FAST32\_MAX@{INT\_FAST32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT\_FAST32\_MAX}{INT\_FAST32\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_a181807730d4a375f848ba139813ce04f}{I\+N\+T32\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a2c6f97ea2d76d0cf6260c84046cdb44e}\label{stdint_8h_a2c6f97ea2d76d0cf6260c84046cdb44e}}
+\index{stdint.h@{stdint.h}!UINT\_FAST8\_MAX@{UINT\_FAST8\_MAX}}
+\index{UINT\_FAST8\_MAX@{UINT\_FAST8\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_FAST8\_MAX}{UINT\_FAST8\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+F\+A\+S\+T8\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_aeb4e270a084ee26fe73e799861bd0252}{U\+I\+N\+T8\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_aed28ca63d9b222f6f1377358fe73a183}\label{stdint_8h_aed28ca63d9b222f6f1377358fe73a183}}
+\index{stdint.h@{stdint.h}!UINT\_FAST16\_MAX@{UINT\_FAST16\_MAX}}
+\index{UINT\_FAST16\_MAX@{UINT\_FAST16\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_FAST16\_MAX}{UINT\_FAST16\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+F\+A\+S\+T16\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_a3ea490c9b3617d4479bd80ef93cd5602}{U\+I\+N\+T16\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_ad51246a178143208b2db3315efd21c45}\label{stdint_8h_ad51246a178143208b2db3315efd21c45}}
+\index{stdint.h@{stdint.h}!UINT\_FAST32\_MAX@{UINT\_FAST32\_MAX}}
+\index{UINT\_FAST32\_MAX@{UINT\_FAST32\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT\_FAST32\_MAX}{UINT\_FAST32\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+\_\+\+F\+A\+S\+T32\+\_\+\+M\+AX~\mbox{\hyperlink{stdint_8h_ab5eb23180f7cc12b7d6c04a8ec067fdd}{U\+I\+N\+T32\+\_\+\+M\+AX}}}
+
+\mbox{\Hypertarget{stdint_8h_a2aaa6d3aa1d7d1e0e326955aa24db752}\label{stdint_8h_a2aaa6d3aa1d7d1e0e326955aa24db752}}
+\index{stdint.h@{stdint.h}!INTPTR\_MIN@{INTPTR\_MIN}}
+\index{INTPTR\_MIN@{INTPTR\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INTPTR\_MIN}{INTPTR\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+P\+T\+R\+\_\+\+M\+IN~(-\/32767-\/1)}
+
+\mbox{\Hypertarget{stdint_8h_a9e5742f2bae4a5283431a3c03499e3a9}\label{stdint_8h_a9e5742f2bae4a5283431a3c03499e3a9}}
+\index{stdint.h@{stdint.h}!INTPTR\_MAX@{INTPTR\_MAX}}
+\index{INTPTR\_MAX@{INTPTR\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INTPTR\_MAX}{INTPTR\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+P\+T\+R\+\_\+\+M\+AX~(32767)}
+
+\mbox{\Hypertarget{stdint_8h_ab2355300ea19395357e62d780f4dd073}\label{stdint_8h_ab2355300ea19395357e62d780f4dd073}}
+\index{stdint.h@{stdint.h}!UINTPTR\_MAX@{UINTPTR\_MAX}}
+\index{UINTPTR\_MAX@{UINTPTR\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINTPTR\_MAX}{UINTPTR\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+P\+T\+R\+\_\+\+M\+AX~(65535)}
+
+\mbox{\Hypertarget{stdint_8h_a2b0a3edfc672154f606dc3ad26277b61}\label{stdint_8h_a2b0a3edfc672154f606dc3ad26277b61}}
+\index{stdint.h@{stdint.h}!INTMAX\_MIN@{INTMAX\_MIN}}
+\index{INTMAX\_MIN@{INTMAX\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INTMAX\_MIN}{INTMAX\_MIN}}
+{\footnotesize\ttfamily \#define I\+N\+T\+M\+A\+X\+\_\+\+M\+IN~(-\/2147483647L-\/1)}
+
+\mbox{\Hypertarget{stdint_8h_a022b9b0a3564d786244a4631847c37a3}\label{stdint_8h_a022b9b0a3564d786244a4631847c37a3}}
+\index{stdint.h@{stdint.h}!INTMAX\_MAX@{INTMAX\_MAX}}
+\index{INTMAX\_MAX@{INTMAX\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INTMAX\_MAX}{INTMAX\_MAX}}
+{\footnotesize\ttfamily \#define I\+N\+T\+M\+A\+X\+\_\+\+M\+AX~(2147483647L)}
+
+\mbox{\Hypertarget{stdint_8h_aa54fd5210434219e9027bfa0f0e325c8}\label{stdint_8h_aa54fd5210434219e9027bfa0f0e325c8}}
+\index{stdint.h@{stdint.h}!UINTMAX\_MAX@{UINTMAX\_MAX}}
+\index{UINTMAX\_MAX@{UINTMAX\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINTMAX\_MAX}{UINTMAX\_MAX}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+M\+A\+X\+\_\+\+M\+AX~(4294967295UL)}
+
+\mbox{\Hypertarget{stdint_8h_ad9b88ba2fb858f98b50b38e49875d90e}\label{stdint_8h_ad9b88ba2fb858f98b50b38e49875d90e}}
+\index{stdint.h@{stdint.h}!PTRDIFF\_MIN@{PTRDIFF\_MIN}}
+\index{PTRDIFF\_MIN@{PTRDIFF\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{PTRDIFF\_MIN}{PTRDIFF\_MIN}}
+{\footnotesize\ttfamily \#define P\+T\+R\+D\+I\+F\+F\+\_\+\+M\+IN~(-\/32767-\/1)}
+
+\mbox{\Hypertarget{stdint_8h_add2ef7bffac19cfdd1f4b5495409672f}\label{stdint_8h_add2ef7bffac19cfdd1f4b5495409672f}}
+\index{stdint.h@{stdint.h}!PTRDIFF\_MAX@{PTRDIFF\_MAX}}
+\index{PTRDIFF\_MAX@{PTRDIFF\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{PTRDIFF\_MAX}{PTRDIFF\_MAX}}
+{\footnotesize\ttfamily \#define P\+T\+R\+D\+I\+F\+F\+\_\+\+M\+AX~(32767)}
+
+\mbox{\Hypertarget{stdint_8h_a21e605b9ac3a03b6de93cdf5a69e129f}\label{stdint_8h_a21e605b9ac3a03b6de93cdf5a69e129f}}
+\index{stdint.h@{stdint.h}!SIG\_ATOMIC\_MIN@{SIG\_ATOMIC\_MIN}}
+\index{SIG\_ATOMIC\_MIN@{SIG\_ATOMIC\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{SIG\_ATOMIC\_MIN}{SIG\_ATOMIC\_MIN}}
+{\footnotesize\ttfamily \#define S\+I\+G\+\_\+\+A\+T\+O\+M\+I\+C\+\_\+\+M\+IN~(0)}
+
+\mbox{\Hypertarget{stdint_8h_a1f5fe9445d0ad0bee21bab1de4cc3e58}\label{stdint_8h_a1f5fe9445d0ad0bee21bab1de4cc3e58}}
+\index{stdint.h@{stdint.h}!SIG\_ATOMIC\_MAX@{SIG\_ATOMIC\_MAX}}
+\index{SIG\_ATOMIC\_MAX@{SIG\_ATOMIC\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{SIG\_ATOMIC\_MAX}{SIG\_ATOMIC\_MAX}}
+{\footnotesize\ttfamily \#define S\+I\+G\+\_\+\+A\+T\+O\+M\+I\+C\+\_\+\+M\+AX~(255)}
+
+\mbox{\Hypertarget{stdint_8h_a3c75bb398badb69c7577b21486f9963f}\label{stdint_8h_a3c75bb398badb69c7577b21486f9963f}}
+\index{stdint.h@{stdint.h}!SIZE\_MAX@{SIZE\_MAX}}
+\index{SIZE\_MAX@{SIZE\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{SIZE\_MAX}{SIZE\_MAX}}
+{\footnotesize\ttfamily \#define S\+I\+Z\+E\+\_\+\+M\+AX~(65535u)}
+
+\mbox{\Hypertarget{stdint_8h_a6b76c8f233c61e6ea05b19b59a6e3549}\label{stdint_8h_a6b76c8f233c61e6ea05b19b59a6e3549}}
+\index{stdint.h@{stdint.h}!INT8\_C@{INT8\_C}}
+\index{INT8\_C@{INT8\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT8\_C}{INT8\_C}}
+{\footnotesize\ttfamily \#define I\+N\+T8\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}}
+
+\mbox{\Hypertarget{stdint_8h_ae80ec61658b3f58afc31ee67ccd27805}\label{stdint_8h_ae80ec61658b3f58afc31ee67ccd27805}}
+\index{stdint.h@{stdint.h}!INT16\_C@{INT16\_C}}
+\index{INT16\_C@{INT16\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT16\_C}{INT16\_C}}
+{\footnotesize\ttfamily \#define I\+N\+T16\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}}
+
+\mbox{\Hypertarget{stdint_8h_a5391a63e4d2c8c8a39b3c6f8fdbd8763}\label{stdint_8h_a5391a63e4d2c8c8a39b3c6f8fdbd8763}}
+\index{stdint.h@{stdint.h}!INT32\_C@{INT32\_C}}
+\index{INT32\_C@{INT32\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INT32\_C}{INT32\_C}}
+{\footnotesize\ttfamily \#define I\+N\+T32\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# L}
+
+\mbox{\Hypertarget{stdint_8h_af77373faf472a16283aad2014724192d}\label{stdint_8h_af77373faf472a16283aad2014724192d}}
+\index{stdint.h@{stdint.h}!UINT8\_C@{UINT8\_C}}
+\index{UINT8\_C@{UINT8\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT8\_C}{UINT8\_C}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T8\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# U}
+
+\mbox{\Hypertarget{stdint_8h_af525dddf7f072ee85c953107123ff1f6}\label{stdint_8h_af525dddf7f072ee85c953107123ff1f6}}
+\index{stdint.h@{stdint.h}!UINT16\_C@{UINT16\_C}}
+\index{UINT16\_C@{UINT16\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT16\_C}{UINT16\_C}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T16\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# U}
+
+\mbox{\Hypertarget{stdint_8h_a87b9ec7df1524edf020b074bbae32d6d}\label{stdint_8h_a87b9ec7df1524edf020b074bbae32d6d}}
+\index{stdint.h@{stdint.h}!UINT32\_C@{UINT32\_C}}
+\index{UINT32\_C@{UINT32\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINT32\_C}{UINT32\_C}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T32\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# UL}
+
+\mbox{\Hypertarget{stdint_8h_a051084d5ebcabf282d9ca9bb2b891a78}\label{stdint_8h_a051084d5ebcabf282d9ca9bb2b891a78}}
+\index{stdint.h@{stdint.h}!WCHAR\_MIN@{WCHAR\_MIN}}
+\index{WCHAR\_MIN@{WCHAR\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{WCHAR\_MIN}{WCHAR\_MIN}}
+{\footnotesize\ttfamily \#define W\+C\+H\+A\+R\+\_\+\+M\+IN~0}
+
+\mbox{\Hypertarget{stdint_8h_a2a823f3ccf2306cfbaa34d8addf66010}\label{stdint_8h_a2a823f3ccf2306cfbaa34d8addf66010}}
+\index{stdint.h@{stdint.h}!WCHAR\_MAX@{WCHAR\_MAX}}
+\index{WCHAR\_MAX@{WCHAR\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{WCHAR\_MAX}{WCHAR\_MAX}}
+{\footnotesize\ttfamily \#define W\+C\+H\+A\+R\+\_\+\+M\+AX~0xffffffff}
+
+\mbox{\Hypertarget{stdint_8h_a5285bc55170ae1701e599decacc7f001}\label{stdint_8h_a5285bc55170ae1701e599decacc7f001}}
+\index{stdint.h@{stdint.h}!WINT\_MIN@{WINT\_MIN}}
+\index{WINT\_MIN@{WINT\_MIN}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{WINT\_MIN}{WINT\_MIN}}
+{\footnotesize\ttfamily \#define W\+I\+N\+T\+\_\+\+M\+IN~0}
+
+\mbox{\Hypertarget{stdint_8h_ad3f7b6bb8aa7d619017a91d3b2edc1ee}\label{stdint_8h_ad3f7b6bb8aa7d619017a91d3b2edc1ee}}
+\index{stdint.h@{stdint.h}!WINT\_MAX@{WINT\_MAX}}
+\index{WINT\_MAX@{WINT\_MAX}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{WINT\_MAX}{WINT\_MAX}}
+{\footnotesize\ttfamily \#define W\+I\+N\+T\+\_\+\+M\+AX~0xffffffff}
+
+\mbox{\Hypertarget{stdint_8h_a1b955596bdc3e4b6ef339f16e468d55f}\label{stdint_8h_a1b955596bdc3e4b6ef339f16e468d55f}}
+\index{stdint.h@{stdint.h}!INTMAX\_C@{INTMAX\_C}}
+\index{INTMAX\_C@{INTMAX\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{INTMAX\_C}{INTMAX\_C}}
+{\footnotesize\ttfamily \#define I\+N\+T\+M\+A\+X\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# L}
+
+\mbox{\Hypertarget{stdint_8h_a00d3f5dd8a8cbd9433d74390bfb2ecef}\label{stdint_8h_a00d3f5dd8a8cbd9433d74390bfb2ecef}}
+\index{stdint.h@{stdint.h}!UINTMAX\_C@{UINTMAX\_C}}
+\index{UINTMAX\_C@{UINTMAX\_C}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{UINTMAX\_C}{UINTMAX\_C}}
+{\footnotesize\ttfamily \#define U\+I\+N\+T\+M\+A\+X\+\_\+C(\begin{DoxyParamCaption}\item[{}]{\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} }\end{DoxyParamCaption})~\mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}} \#\# UL}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{stdint_8h_aef44329758059c91c76d334e8fc09700}\label{stdint_8h_aef44329758059c91c76d334e8fc09700}}
+\index{stdint.h@{stdint.h}!int8\_t@{int8\_t}}
+\index{int8\_t@{int8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int8\_t}{int8\_t}}
+{\footnotesize\ttfamily typedef signed char \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}\label{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}}
+\index{stdint.h@{stdint.h}!int16\_t@{int16\_t}}
+\index{int16\_t@{int16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int16\_t}{int16\_t}}
+{\footnotesize\ttfamily typedef short int \mbox{\hyperlink{stdint_8h_a66634143db08bebe9b46ab4cb1fc6fd3}{int16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a7cf4a942912b990a96c39f9a2b81aa32}\label{stdint_8h_a7cf4a942912b990a96c39f9a2b81aa32}}
+\index{stdint.h@{stdint.h}!int32\_t@{int32\_t}}
+\index{int32\_t@{int32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int32\_t}{int32\_t}}
+{\footnotesize\ttfamily typedef long int \mbox{\hyperlink{stdint_8h_a7cf4a942912b990a96c39f9a2b81aa32}{int32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}\label{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}}
+\index{stdint.h@{stdint.h}!uint8\_t@{uint8\_t}}
+\index{uint8\_t@{uint8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint8\_t}{uint8\_t}}
+{\footnotesize\ttfamily typedef unsigned char \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_adf4d876453337156dde61095e1f20223}\label{stdint_8h_adf4d876453337156dde61095e1f20223}}
+\index{stdint.h@{stdint.h}!uint16\_t@{uint16\_t}}
+\index{uint16\_t@{uint16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint16\_t}{uint16\_t}}
+{\footnotesize\ttfamily typedef unsigned short int \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a33594304e786b158f3fb30289278f5af}\label{stdint_8h_a33594304e786b158f3fb30289278f5af}}
+\index{stdint.h@{stdint.h}!uint32\_t@{uint32\_t}}
+\index{uint32\_t@{uint32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint32\_t}{uint32\_t}}
+{\footnotesize\ttfamily typedef unsigned long int \mbox{\hyperlink{stdint_8h_a33594304e786b158f3fb30289278f5af}{uint32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_ae04fa5ea5ad475bfe428842a986fbf28}\label{stdint_8h_ae04fa5ea5ad475bfe428842a986fbf28}}
+\index{stdint.h@{stdint.h}!int\_least8\_t@{int\_least8\_t}}
+\index{int\_least8\_t@{int\_least8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_least8\_t}{int\_least8\_t}}
+{\footnotesize\ttfamily typedef signed char \mbox{\hyperlink{stdint_8h_ae04fa5ea5ad475bfe428842a986fbf28}{int\+\_\+least8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a3379485af1661b4f36ac1c311832253b}\label{stdint_8h_a3379485af1661b4f36ac1c311832253b}}
+\index{stdint.h@{stdint.h}!int\_least16\_t@{int\_least16\_t}}
+\index{int\_least16\_t@{int\_least16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_least16\_t}{int\_least16\_t}}
+{\footnotesize\ttfamily typedef short int \mbox{\hyperlink{stdint_8h_a3379485af1661b4f36ac1c311832253b}{int\+\_\+least16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a50d1c7c0834558a78588e1d6d0f62a1d}\label{stdint_8h_a50d1c7c0834558a78588e1d6d0f62a1d}}
+\index{stdint.h@{stdint.h}!int\_least32\_t@{int\_least32\_t}}
+\index{int\_least32\_t@{int\_least32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_least32\_t}{int\_least32\_t}}
+{\footnotesize\ttfamily typedef long int \mbox{\hyperlink{stdint_8h_a50d1c7c0834558a78588e1d6d0f62a1d}{int\+\_\+least32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_ab0fdd2a9dc9606590ecccc0a5d8b5b7c}\label{stdint_8h_ab0fdd2a9dc9606590ecccc0a5d8b5b7c}}
+\index{stdint.h@{stdint.h}!uint\_least8\_t@{uint\_least8\_t}}
+\index{uint\_least8\_t@{uint\_least8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_least8\_t}{uint\_least8\_t}}
+{\footnotesize\ttfamily typedef unsigned char \mbox{\hyperlink{stdint_8h_ab0fdd2a9dc9606590ecccc0a5d8b5b7c}{uint\+\_\+least8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a1bae72af13d35bac8eb9424db7e27bf1}\label{stdint_8h_a1bae72af13d35bac8eb9424db7e27bf1}}
+\index{stdint.h@{stdint.h}!uint\_least16\_t@{uint\_least16\_t}}
+\index{uint\_least16\_t@{uint\_least16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_least16\_t}{uint\_least16\_t}}
+{\footnotesize\ttfamily typedef unsigned short int \mbox{\hyperlink{stdint_8h_a1bae72af13d35bac8eb9424db7e27bf1}{uint\+\_\+least16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a1c0bb513299dbdffa1cce4277593b3ce}\label{stdint_8h_a1c0bb513299dbdffa1cce4277593b3ce}}
+\index{stdint.h@{stdint.h}!uint\_least32\_t@{uint\_least32\_t}}
+\index{uint\_least32\_t@{uint\_least32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_least32\_t}{uint\_least32\_t}}
+{\footnotesize\ttfamily typedef unsigned long int \mbox{\hyperlink{stdint_8h_a1c0bb513299dbdffa1cce4277593b3ce}{uint\+\_\+least32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_afa981e0352f65c207364c9cb82246b53}\label{stdint_8h_afa981e0352f65c207364c9cb82246b53}}
+\index{stdint.h@{stdint.h}!int\_fast8\_t@{int\_fast8\_t}}
+\index{int\_fast8\_t@{int\_fast8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_fast8\_t}{int\_fast8\_t}}
+{\footnotesize\ttfamily typedef signed char \mbox{\hyperlink{stdint_8h_afa981e0352f65c207364c9cb82246b53}{int\+\_\+fast8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_afc08556e35ad5fc42968cf164e7852d4}\label{stdint_8h_afc08556e35ad5fc42968cf164e7852d4}}
+\index{stdint.h@{stdint.h}!int\_fast16\_t@{int\_fast16\_t}}
+\index{int\_fast16\_t@{int\_fast16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_fast16\_t}{int\_fast16\_t}}
+{\footnotesize\ttfamily typedef int \mbox{\hyperlink{stdint_8h_afc08556e35ad5fc42968cf164e7852d4}{int\+\_\+fast16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a21402dabb3274e5161a34a27ccff50db}\label{stdint_8h_a21402dabb3274e5161a34a27ccff50db}}
+\index{stdint.h@{stdint.h}!int\_fast32\_t@{int\_fast32\_t}}
+\index{int\_fast32\_t@{int\_fast32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{int\_fast32\_t}{int\_fast32\_t}}
+{\footnotesize\ttfamily typedef long int \mbox{\hyperlink{stdint_8h_a21402dabb3274e5161a34a27ccff50db}{int\+\_\+fast32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a2d31063fef649c85396fb28130ef9795}\label{stdint_8h_a2d31063fef649c85396fb28130ef9795}}
+\index{stdint.h@{stdint.h}!uint\_fast8\_t@{uint\_fast8\_t}}
+\index{uint\_fast8\_t@{uint\_fast8\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_fast8\_t}{uint\_fast8\_t}}
+{\footnotesize\ttfamily typedef unsigned char \mbox{\hyperlink{stdint_8h_a2d31063fef649c85396fb28130ef9795}{uint\+\_\+fast8\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a226d967fb6d06433caf43f20dc876aae}\label{stdint_8h_a226d967fb6d06433caf43f20dc876aae}}
+\index{stdint.h@{stdint.h}!uint\_fast16\_t@{uint\_fast16\_t}}
+\index{uint\_fast16\_t@{uint\_fast16\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_fast16\_t}{uint\_fast16\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{stdint_8h_a226d967fb6d06433caf43f20dc876aae}{uint\+\_\+fast16\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a8a5d6c5353ff297fd0797e654772361b}\label{stdint_8h_a8a5d6c5353ff297fd0797e654772361b}}
+\index{stdint.h@{stdint.h}!uint\_fast32\_t@{uint\_fast32\_t}}
+\index{uint\_fast32\_t@{uint\_fast32\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uint\_fast32\_t}{uint\_fast32\_t}}
+{\footnotesize\ttfamily typedef unsigned long int \mbox{\hyperlink{stdint_8h_a8a5d6c5353ff297fd0797e654772361b}{uint\+\_\+fast32\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a0fbe4a4f8dd857ee04923a901f27465f}\label{stdint_8h_a0fbe4a4f8dd857ee04923a901f27465f}}
+\index{stdint.h@{stdint.h}!intptr\_t@{intptr\_t}}
+\index{intptr\_t@{intptr\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{intptr\_t}{intptr\_t}}
+{\footnotesize\ttfamily typedef int \mbox{\hyperlink{stdint_8h_a0fbe4a4f8dd857ee04923a901f27465f}{intptr\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a728e973c799f206f0151c8a3bd1e5699}\label{stdint_8h_a728e973c799f206f0151c8a3bd1e5699}}
+\index{stdint.h@{stdint.h}!uintptr\_t@{uintptr\_t}}
+\index{uintptr\_t@{uintptr\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uintptr\_t}{uintptr\_t}}
+{\footnotesize\ttfamily typedef unsigned int \mbox{\hyperlink{stdint_8h_a728e973c799f206f0151c8a3bd1e5699}{uintptr\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_aa8722f97ae26d6aeff0fd4ebba7de7e4}\label{stdint_8h_aa8722f97ae26d6aeff0fd4ebba7de7e4}}
+\index{stdint.h@{stdint.h}!intmax\_t@{intmax\_t}}
+\index{intmax\_t@{intmax\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{intmax\_t}{intmax\_t}}
+{\footnotesize\ttfamily typedef long int \mbox{\hyperlink{stdint_8h_aa8722f97ae26d6aeff0fd4ebba7de7e4}{intmax\+\_\+t}}}
+
+\mbox{\Hypertarget{stdint_8h_a21649560c6e8dce6de2fb6a95f1bf802}\label{stdint_8h_a21649560c6e8dce6de2fb6a95f1bf802}}
+\index{stdint.h@{stdint.h}!uintmax\_t@{uintmax\_t}}
+\index{uintmax\_t@{uintmax\_t}!stdint.h@{stdint.h}}
+\doxyparagraph{\texorpdfstring{uintmax\_t}{uintmax\_t}}
+{\footnotesize\ttfamily typedef unsigned long int \mbox{\hyperlink{stdint_8h_a21649560c6e8dce6de2fb6a95f1bf802}{uintmax\+\_\+t}}}
+
diff --git a/docs/latex/stdio_8h.tex b/docs/latex/stdio_8h.tex
new file mode 100644
index 00000000..84ddcdd4
--- /dev/null
+++ b/docs/latex/stdio_8h.tex
@@ -0,0 +1,97 @@
+\hypertarget{stdio_8h}{}\doxysubsection{stdio.\+h File Reference}
+\label{stdio_8h}\index{stdio.h@{stdio.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{stdio_8h_a9bc92fb9f23c72a66d030d4028dda72d}{putchar}} (char \mbox{\hyperlink{sms_8h_a0b3366755f3276b0243c1e0497471b7a}{c}}) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf}} (const char $\ast$format,...) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{stdio_8h_a31913a297ee18548c81d482ef6bdbe0f}{sprintf}} (char $\ast$str, const char $\ast$format,...) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void \mbox{\hyperlink{stdio_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f}{puts}} (const char $\ast$s)
+\item
+char $\ast$ \mbox{\hyperlink{stdio_8h_a00a5b27bc2e5280952b02c304d7b27bc}{gets}} (char $\ast$s) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+char \mbox{\hyperlink{stdio_8h_a2c79157c8bc2db72fbf1e34f291ff5d8}{getchar}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Basic file/console input output functions.
+
+Including stdio.\+h will use a large number of the background tiles for font characters. If stdio.\+h is not included then that space will be available for use with other tiles instead.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{stdio_8h_a9bc92fb9f23c72a66d030d4028dda72d}\label{stdio_8h_a9bc92fb9f23c72a66d030d4028dda72d}}
+\index{stdio.h@{stdio.h}!putchar@{putchar}}
+\index{putchar@{putchar}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{putchar()}{putchar()}}
+{\footnotesize\ttfamily void putchar (\begin{DoxyParamCaption}\item[{char}]{c }\end{DoxyParamCaption})}
+
+Print char to stdout.
+\begin{DoxyParams}{Parameters}
+{\em c} & Character to print \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{stdio_8h_ab403fa700816f08631ba75bc536f74d4}\label{stdio_8h_ab403fa700816f08631ba75bc536f74d4}}
+\index{stdio.h@{stdio.h}!printf@{printf}}
+\index{printf@{printf}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{printf()}{printf()}}
+{\footnotesize\ttfamily void printf (\begin{DoxyParamCaption}\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})}
+
+Print the string and arguments given by format to stdout.
+
+
+\begin{DoxyParams}{Parameters}
+{\em format} & The format string as per printf\\
+\hline
+\end{DoxyParams}
+Does not return the number of characters printed.
+
+Currently supported\+: \begin{DoxyItemize}
+\item \%hx (char as hex) \item \%hu (unsigned char) \item \%hd (signed char) \item \%c (character) \item \%u (unsigned int) \item \%d (signed int) \item \%x (unsigned int as hex) \item \%s (string)\end{DoxyItemize}
+Warning\+: to correctly pass chars for printing as chars, they {\itshape must} be explicitly re-\/cast as such when calling the function. See \mbox{\hyperlink{docs_coding_guidelines_docs_chars_varargs}{docs\+\_\+chars\+\_\+varargs}} for more details. \mbox{\Hypertarget{stdio_8h_a31913a297ee18548c81d482ef6bdbe0f}\label{stdio_8h_a31913a297ee18548c81d482ef6bdbe0f}}
+\index{stdio.h@{stdio.h}!sprintf@{sprintf}}
+\index{sprintf@{sprintf}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{sprintf()}{sprintf()}}
+{\footnotesize\ttfamily void sprintf (\begin{DoxyParamCaption}\item[{char $\ast$}]{str, }\item[{const char $\ast$}]{format, }\item[{}]{... }\end{DoxyParamCaption})}
+
+Print the string and arguments given by format to a buffer.
+
+
+\begin{DoxyParams}{Parameters}
+{\em str} & The buffer to print into \\
+\hline
+{\em format} & The format string as per \mbox{\hyperlink{stdio_8h_ab403fa700816f08631ba75bc536f74d4}{printf}}\\
+\hline
+\end{DoxyParams}
+Does not return the number of characters printed. \mbox{\Hypertarget{stdio_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f}\label{stdio_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f}}
+\index{stdio.h@{stdio.h}!puts@{puts}}
+\index{puts@{puts}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{puts()}{puts()}}
+{\footnotesize\ttfamily void puts (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+\mbox{\hyperlink{stdio_8h_a299d0f9cb9e7b14e1278a4ed21e4d76f}{puts()}} writes the string {\bfseries{s}} and a trailing newline to stdout. \mbox{\Hypertarget{stdio_8h_a00a5b27bc2e5280952b02c304d7b27bc}\label{stdio_8h_a00a5b27bc2e5280952b02c304d7b27bc}}
+\index{stdio.h@{stdio.h}!gets@{gets}}
+\index{gets@{gets}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{gets()}{gets()}}
+{\footnotesize\ttfamily char$\ast$ gets (\begin{DoxyParamCaption}\item[{char $\ast$}]{s }\end{DoxyParamCaption})}
+
+\mbox{\hyperlink{stdio_8h_a00a5b27bc2e5280952b02c304d7b27bc}{gets()}} Reads a line from stdin into a buffer pointed to by {\bfseries{s}}.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & Buffer to store string in\\
+\hline
+\end{DoxyParams}
+Reads until either a terminating newline or an E\+OF, which it replaces with \textquotesingle{}\textbackslash{}0\textquotesingle{}. No check for buffer overrun is performed.
+
+Returns\+: Buffer pointed to by {\bfseries{s}} \mbox{\Hypertarget{stdio_8h_a2c79157c8bc2db72fbf1e34f291ff5d8}\label{stdio_8h_a2c79157c8bc2db72fbf1e34f291ff5d8}}
+\index{stdio.h@{stdio.h}!getchar@{getchar}}
+\index{getchar@{getchar}!stdio.h@{stdio.h}}
+\doxyparagraph{\texorpdfstring{getchar()}{getchar()}}
+{\footnotesize\ttfamily char getchar (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\hyperlink{stdio_8h_a2c79157c8bc2db72fbf1e34f291ff5d8}{getchar()}} Reads and returns a single character from stdin.
\ No newline at end of file
diff --git a/docs/latex/stdlib_8h.tex b/docs/latex/stdlib_8h.tex
new file mode 100644
index 00000000..8d9b00a9
--- /dev/null
+++ b/docs/latex/stdlib_8h.tex
@@ -0,0 +1,238 @@
+\hypertarget{stdlib_8h}{}\doxysubsection{stdlib.\+h File Reference}
+\label{stdlib_8h}\index{stdlib.h@{stdlib.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{stdlib_8h_a83798998ad669e85a8f75d6490191760}{\+\_\+\+\_\+reentrant}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{stdlib_8h_a55e99c539cf7723ec15e856b7e0a8cee}{exit}} (int status)
+\item
+int \mbox{\hyperlink{stdlib_8h_a3bb2d2cacc5535004757ebbc640079fb}{abs}} (int i) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+long \mbox{\hyperlink{stdlib_8h_a8b7210ba18f750970a2db3c73a841a22}{labs}} (long num) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+int \mbox{\hyperlink{stdlib_8h_a30670a60464f77af17dfb353353d6df8}{atoi}} (const char $\ast$s)
+\item
+long \mbox{\hyperlink{stdlib_8h_a825c37450147a643edbcb1a435518307}{atol}} (const char $\ast$s)
+\item
+char $\ast$ \mbox{\hyperlink{stdlib_8h_aac2ea595a9ea8f5ebd883a0bc05eba5c}{itoa}} (int n, char $\ast$s, unsigned char radix) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+char $\ast$ \mbox{\hyperlink{stdlib_8h_a38c070016cb06132360cfa5bacc2ed19}{uitoa}} (unsigned int n, char $\ast$s, unsigned char radix) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+char $\ast$ \mbox{\hyperlink{stdlib_8h_a6374e62474a5a76c7ace9a59fb1cc829}{ltoa}} (long n, char $\ast$s, unsigned char radix) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+char $\ast$ \mbox{\hyperlink{stdlib_8h_ac22b79fe0c1279eabc3daf57328008d2}{ultoa}} (unsigned long n, char $\ast$s, unsigned char radix) \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+void $\ast$ \mbox{\hyperlink{stdlib_8h_a62b7798461bd461da64c5f9d35feddf7}{calloc}} (\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} nmemb, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} size)
+\item
+void $\ast$ \mbox{\hyperlink{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}{malloc}} (\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} size)
+\item
+void $\ast$ \mbox{\hyperlink{stdlib_8h_a1a6b5e8d2f1c37e5b43e4345586075be}{realloc}} (void $\ast$ptr, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} size)
+\item
+void \mbox{\hyperlink{stdlib_8h_afbedc913aa4651b3c3b4b3aecd9b4711}{free}} (void $\ast$ptr)
+\item
+void $\ast$ \mbox{\hyperlink{stdlib_8h_ab0ace018fe7dfa1720930d2dce0c45e3}{bsearch}} (const void $\ast$key, const void $\ast$base, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} nmemb, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} size, int($\ast$compar)(const void $\ast$, const void $\ast$) \mbox{\hyperlink{stdlib_8h_a83798998ad669e85a8f75d6490191760}{\+\_\+\+\_\+reentrant}})
+\item
+void \mbox{\hyperlink{stdlib_8h_a02d9d6443b9e613802b2e9c5c71caf59}{qsort}} (void $\ast$base, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} nmemb, \mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}} size, int($\ast$compar)(const void $\ast$, const void $\ast$) \mbox{\hyperlink{stdlib_8h_a83798998ad669e85a8f75d6490191760}{\+\_\+\+\_\+reentrant}})
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{stdlib_8h_a83798998ad669e85a8f75d6490191760}\label{stdlib_8h_a83798998ad669e85a8f75d6490191760}}
+\index{stdlib.h@{stdlib.h}!\_\_reentrant@{\_\_reentrant}}
+\index{\_\_reentrant@{\_\_reentrant}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{\_\_reentrant}{\_\_reentrant}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+reentrant}
+
+file stdlib.\+h \textquotesingle{}Standard library\textquotesingle{} functions, for whatever that means.
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{stdlib_8h_a55e99c539cf7723ec15e856b7e0a8cee}\label{stdlib_8h_a55e99c539cf7723ec15e856b7e0a8cee}}
+\index{stdlib.h@{stdlib.h}!exit@{exit}}
+\index{exit@{exit}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{exit()}{exit()}}
+{\footnotesize\ttfamily void exit (\begin{DoxyParamCaption}\item[{int}]{status }\end{DoxyParamCaption})}
+
+Causes normal program termination and the value of status is returned to the parent. All open streams are flushed and closed. \mbox{\Hypertarget{stdlib_8h_a3bb2d2cacc5535004757ebbc640079fb}\label{stdlib_8h_a3bb2d2cacc5535004757ebbc640079fb}}
+\index{stdlib.h@{stdlib.h}!abs@{abs}}
+\index{abs@{abs}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{abs()}{abs()}}
+{\footnotesize\ttfamily int abs (\begin{DoxyParamCaption}\item[{int}]{i }\end{DoxyParamCaption})}
+
+Returns the absolute value of int {\bfseries{i}}
+\begin{DoxyParams}{Parameters}
+{\em i} & Int to obtain absolute value of\\
+\hline
+\end{DoxyParams}
+If i is negative, returns -\/i; else returns i. \mbox{\Hypertarget{stdlib_8h_a8b7210ba18f750970a2db3c73a841a22}\label{stdlib_8h_a8b7210ba18f750970a2db3c73a841a22}}
+\index{stdlib.h@{stdlib.h}!labs@{labs}}
+\index{labs@{labs}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{labs()}{labs()}}
+{\footnotesize\ttfamily long labs (\begin{DoxyParamCaption}\item[{long}]{num }\end{DoxyParamCaption})}
+
+Returns the absolute value of long int {\bfseries{num}}
+
+
+\begin{DoxyParams}{Parameters}
+{\em num} & Long integer to obtain absolute value of \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{stdlib_8h_a30670a60464f77af17dfb353353d6df8}\label{stdlib_8h_a30670a60464f77af17dfb353353d6df8}}
+\index{stdlib.h@{stdlib.h}!atoi@{atoi}}
+\index{atoi@{atoi}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{atoi()}{atoi()}}
+{\footnotesize\ttfamily int atoi (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Converts an A\+S\+C\+II string to an int
+
+
+\begin{DoxyParams}{Parameters}
+{\em s} & String to convert to an int\\
+\hline
+\end{DoxyParams}
+The string may be of the format
+\begin{DoxyCode}{0}
+\DoxyCodeLine{[\(\backslash\)s]*[+-\/][\mbox{\hyperlink{gb_8h_a0a3d95ad0ab8ad213016101d2e9c3d3e}{\(\backslash\)d}}]+[\(\backslash\)D]*}
+\end{DoxyCode}
+ i.\+e. any number of spaces, an optional + or -\/, then an arbitrary number of digits.
+
+The result is undefined if the number doesnt fit in an int.
+
+Returns\+: Int value of string \mbox{\Hypertarget{stdlib_8h_a825c37450147a643edbcb1a435518307}\label{stdlib_8h_a825c37450147a643edbcb1a435518307}}
+\index{stdlib.h@{stdlib.h}!atol@{atol}}
+\index{atol@{atol}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{atol()}{atol()}}
+{\footnotesize\ttfamily long atol (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s }\end{DoxyParamCaption})}
+
+Converts an A\+S\+C\+II string to a long.
+\begin{DoxyParams}{Parameters}
+{\em s} & String to convert to an long int \\
+\hline
+\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{stdlib_8h_a30670a60464f77af17dfb353353d6df8}{atoi()}}
+\end{DoxySeeAlso}
+Returns\+: Long int value of string \mbox{\Hypertarget{stdlib_8h_aac2ea595a9ea8f5ebd883a0bc05eba5c}\label{stdlib_8h_aac2ea595a9ea8f5ebd883a0bc05eba5c}}
+\index{stdlib.h@{stdlib.h}!itoa@{itoa}}
+\index{itoa@{itoa}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{itoa()}{itoa()}}
+{\footnotesize\ttfamily char$\ast$ itoa (\begin{DoxyParamCaption}\item[{int}]{n, }\item[{char $\ast$}]{s, }\item[{unsigned char}]{radix }\end{DoxyParamCaption})}
+
+Converts an int into a base 10 A\+S\+C\+II string.
+\begin{DoxyParams}{Parameters}
+{\em n} & Int to convert to a string \\
+\hline
+{\em s} & String to store the converted number \\
+\hline
+{\em radix} & Numerical base for converted number, ex\+: 10 is decimal base (parameter is required but not utilized on Game Boy and Analogue Pocket)\\
+\hline
+\end{DoxyParams}
+Returns\+: Pointer to converted string \mbox{\Hypertarget{stdlib_8h_a38c070016cb06132360cfa5bacc2ed19}\label{stdlib_8h_a38c070016cb06132360cfa5bacc2ed19}}
+\index{stdlib.h@{stdlib.h}!uitoa@{uitoa}}
+\index{uitoa@{uitoa}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{uitoa()}{uitoa()}}
+{\footnotesize\ttfamily char$\ast$ uitoa (\begin{DoxyParamCaption}\item[{unsigned int}]{n, }\item[{char $\ast$}]{s, }\item[{unsigned char}]{radix }\end{DoxyParamCaption})}
+
+Converts an unsigned int into a base 10 A\+S\+C\+II string.
+\begin{DoxyParams}{Parameters}
+{\em n} & Unsigned Int to convert to a string \\
+\hline
+{\em s} & String to store the converted number \\
+\hline
+{\em radix} & Numerical base for converted number, ex\+: 10 is decimal base (parameter is required but not utilized on Game Boy and Analogue Pocket)\\
+\hline
+\end{DoxyParams}
+Returns\+: Pointer to converted string \mbox{\Hypertarget{stdlib_8h_a6374e62474a5a76c7ace9a59fb1cc829}\label{stdlib_8h_a6374e62474a5a76c7ace9a59fb1cc829}}
+\index{stdlib.h@{stdlib.h}!ltoa@{ltoa}}
+\index{ltoa@{ltoa}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{ltoa()}{ltoa()}}
+{\footnotesize\ttfamily char$\ast$ ltoa (\begin{DoxyParamCaption}\item[{long}]{n, }\item[{char $\ast$}]{s, }\item[{unsigned char}]{radix }\end{DoxyParamCaption})}
+
+Converts a long into a base 10 A\+S\+C\+II string.
+\begin{DoxyParams}{Parameters}
+{\em n} & Long int to convert to a string \\
+\hline
+{\em s} & String to store the converted number \\
+\hline
+{\em radix} & Numerical base for converted number, ex\+: 10 is decimal base (parameter is required but not utilized on Game Boy and Analogue Pocket)\\
+\hline
+\end{DoxyParams}
+Returns\+: Pointer to converted string \mbox{\Hypertarget{stdlib_8h_ac22b79fe0c1279eabc3daf57328008d2}\label{stdlib_8h_ac22b79fe0c1279eabc3daf57328008d2}}
+\index{stdlib.h@{stdlib.h}!ultoa@{ultoa}}
+\index{ultoa@{ultoa}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{ultoa()}{ultoa()}}
+{\footnotesize\ttfamily char$\ast$ ultoa (\begin{DoxyParamCaption}\item[{unsigned long}]{n, }\item[{char $\ast$}]{s, }\item[{unsigned char}]{radix }\end{DoxyParamCaption})}
+
+Converts an unsigned long into a base 10 A\+S\+C\+II string.
+\begin{DoxyParams}{Parameters}
+{\em n} & Unsigned Long Int to convert to a string \\
+\hline
+{\em s} & String to store the converted number \\
+\hline
+{\em radix} & Numerical base for converted number, ex\+: 10 is decimal base (parameter is required but not utilized on Game Boy and Analogue Pocket)\\
+\hline
+\end{DoxyParams}
+Returns\+: Pointer to converted string \mbox{\Hypertarget{stdlib_8h_a62b7798461bd461da64c5f9d35feddf7}\label{stdlib_8h_a62b7798461bd461da64c5f9d35feddf7}}
+\index{stdlib.h@{stdlib.h}!calloc@{calloc}}
+\index{calloc@{calloc}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{calloc()}{calloc()}}
+{\footnotesize\ttfamily void$\ast$ calloc (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{nmemb, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{size }\end{DoxyParamCaption})}
+
+Memory allocation functions \mbox{\Hypertarget{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}\label{stdlib_8h_a7ac38fce3243a7dcf448301ee9ffd392}}
+\index{stdlib.h@{stdlib.h}!malloc@{malloc}}
+\index{malloc@{malloc}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{malloc()}{malloc()}}
+{\footnotesize\ttfamily void$\ast$ malloc (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{size }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{stdlib_8h_a1a6b5e8d2f1c37e5b43e4345586075be}\label{stdlib_8h_a1a6b5e8d2f1c37e5b43e4345586075be}}
+\index{stdlib.h@{stdlib.h}!realloc@{realloc}}
+\index{realloc@{realloc}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{realloc()}{realloc()}}
+{\footnotesize\ttfamily void$\ast$ realloc (\begin{DoxyParamCaption}\item[{void $\ast$}]{ptr, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{size }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{stdlib_8h_afbedc913aa4651b3c3b4b3aecd9b4711}\label{stdlib_8h_afbedc913aa4651b3c3b4b3aecd9b4711}}
+\index{stdlib.h@{stdlib.h}!free@{free}}
+\index{free@{free}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{free()}{free()}}
+{\footnotesize\ttfamily void free (\begin{DoxyParamCaption}\item[{void $\ast$}]{ptr }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{stdlib_8h_ab0ace018fe7dfa1720930d2dce0c45e3}\label{stdlib_8h_ab0ace018fe7dfa1720930d2dce0c45e3}}
+\index{stdlib.h@{stdlib.h}!bsearch@{bsearch}}
+\index{bsearch@{bsearch}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{bsearch()}{bsearch()}}
+{\footnotesize\ttfamily void$\ast$ bsearch (\begin{DoxyParamCaption}\item[{const void $\ast$}]{key, }\item[{const void $\ast$}]{base, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{nmemb, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{size, }\item[{int($\ast$)(const void $\ast$, const void $\ast$) \mbox{\hyperlink{stdlib_8h_a83798998ad669e85a8f75d6490191760}{\+\_\+\+\_\+reentrant}}}]{compar }\end{DoxyParamCaption})}
+
+search a sorted array of {\bfseries{nmemb}} items
+\begin{DoxyParams}{Parameters}
+{\em key} & Pointer to object that is the key for the search \\
+\hline
+{\em base} & Pointer to first object in the array to search \\
+\hline
+{\em nmemb} & Number of elements in the array \\
+\hline
+{\em size} & Size in bytes of each element in the array \\
+\hline
+{\em compar} & Function used to compare two elements of the array\\
+\hline
+\end{DoxyParams}
+Returns\+: Pointer to array entry that matches the search key. If key is not found, N\+U\+LL is returned. \mbox{\Hypertarget{stdlib_8h_a02d9d6443b9e613802b2e9c5c71caf59}\label{stdlib_8h_a02d9d6443b9e613802b2e9c5c71caf59}}
+\index{stdlib.h@{stdlib.h}!qsort@{qsort}}
+\index{qsort@{qsort}!stdlib.h@{stdlib.h}}
+\doxyparagraph{\texorpdfstring{qsort()}{qsort()}}
+{\footnotesize\ttfamily void qsort (\begin{DoxyParamCaption}\item[{void $\ast$}]{base, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{nmemb, }\item[{\mbox{\hyperlink{asm_2gbz80_2types_8h_a7c94ea6f8948649f8d181ae55911eeaf}{size\+\_\+t}}}]{size, }\item[{int($\ast$)(const void $\ast$, const void $\ast$) \mbox{\hyperlink{stdlib_8h_a83798998ad669e85a8f75d6490191760}{\+\_\+\+\_\+reentrant}}}]{compar }\end{DoxyParamCaption})}
+
+Sort an array of {\bfseries{nmemb}} items
+\begin{DoxyParams}{Parameters}
+{\em base} & Pointer to first object in the array to sort \\
+\hline
+{\em nmemb} & Number of elements in the array \\
+\hline
+{\em size} & Size in bytes of each element in the array \\
+\hline
+{\em compar} & Function used to compare and sort two elements of the array \\
+\hline
+\end{DoxyParams}
diff --git a/docs/latex/stdnoreturn_8h.tex b/docs/latex/stdnoreturn_8h.tex
new file mode 100644
index 00000000..e5167582
--- /dev/null
+++ b/docs/latex/stdnoreturn_8h.tex
@@ -0,0 +1,16 @@
+\hypertarget{stdnoreturn_8h}{}\doxysubsection{stdnoreturn.\+h File Reference}
+\label{stdnoreturn_8h}\index{stdnoreturn.h@{stdnoreturn.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{stdnoreturn_8h_a4a453f3a748e55cbdac6fcc79357cfef}{noreturn}}~\+\_\+\+Noreturn
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{stdnoreturn_8h_a4a453f3a748e55cbdac6fcc79357cfef}\label{stdnoreturn_8h_a4a453f3a748e55cbdac6fcc79357cfef}}
+\index{stdnoreturn.h@{stdnoreturn.h}!noreturn@{noreturn}}
+\index{noreturn@{noreturn}!stdnoreturn.h@{stdnoreturn.h}}
+\doxyparagraph{\texorpdfstring{noreturn}{noreturn}}
+{\footnotesize\ttfamily \#define noreturn~\+\_\+\+Noreturn}
+
diff --git a/docs/latex/string_8h.tex b/docs/latex/string_8h.tex
new file mode 100644
index 00000000..ad44c690
--- /dev/null
+++ b/docs/latex/string_8h.tex
@@ -0,0 +1,7 @@
+\hypertarget{string_8h}{}\doxysubsection{string.\+h File Reference}
+\label{string_8h}\index{string.h@{string.h}}
+{\ttfamily \#include $<$asm/gbz80/string.\+h$>$}\newline
+
+
+\doxysubsubsection{Detailed Description}
+Generic string functions.
\ No newline at end of file
diff --git a/docs/latex/struct_o_a_m__item__t.tex b/docs/latex/struct_o_a_m__item__t.tex
new file mode 100644
index 00000000..7cd3c16c
--- /dev/null
+++ b/docs/latex/struct_o_a_m__item__t.tex
@@ -0,0 +1,63 @@
+\hypertarget{struct_o_a_m__item__t}{}\doxysubsection{O\+A\+M\+\_\+item\+\_\+t Struct Reference}
+\label{struct_o_a_m__item__t}\index{OAM\_item\_t@{OAM\_item\_t}}
+
+
+{\ttfamily \#include $<$gb.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{struct_o_a_m__item__t_ad5ad9d3d300858bf0b1cd9e210366a18}{y}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{struct_o_a_m__item__t_a3a13fb7441f8c431d9494cd2441c6c0b}{x}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{struct_o_a_m__item__t_a6c269ed01269d02bcf7e36e0de3696f6}{tile}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{struct_o_a_m__item__t_a435e018f3bbc0ebaa9eaf96806d386d9}{prop}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Sprite Attributes structure
+\begin{DoxyParams}{Parameters}
+{\em x} & X Coordinate of the sprite on screen \\
+\hline
+{\em y} & Y Coordinate of the sprite on screen \\
+\hline
+{\em tile} & Sprite tile number (see \mbox{\hyperlink{sms_8h_a05bf0b9f1328de7b568a19a2a428bcfe}{set\+\_\+sprite\+\_\+tile}}) \\
+\hline
+{\em prop} & O\+AM Property Flags (see \mbox{\hyperlink{sms_8h_a99ea3252469e3614e977cce2aa1d06f7}{set\+\_\+sprite\+\_\+prop}}) \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{struct_o_a_m__item__t_ad5ad9d3d300858bf0b1cd9e210366a18}\label{struct_o_a_m__item__t_ad5ad9d3d300858bf0b1cd9e210366a18}}
+\index{OAM\_item\_t@{OAM\_item\_t}!y@{y}}
+\index{y@{y}!OAM\_item\_t@{OAM\_item\_t}}
+\doxyparagraph{\texorpdfstring{y}{y}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} O\+A\+M\+\_\+item\+\_\+t\+::y}
+
+\mbox{\Hypertarget{struct_o_a_m__item__t_a3a13fb7441f8c431d9494cd2441c6c0b}\label{struct_o_a_m__item__t_a3a13fb7441f8c431d9494cd2441c6c0b}}
+\index{OAM\_item\_t@{OAM\_item\_t}!x@{x}}
+\index{x@{x}!OAM\_item\_t@{OAM\_item\_t}}
+\doxyparagraph{\texorpdfstring{x}{x}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} O\+A\+M\+\_\+item\+\_\+t\+::x}
+
+\mbox{\Hypertarget{struct_o_a_m__item__t_a6c269ed01269d02bcf7e36e0de3696f6}\label{struct_o_a_m__item__t_a6c269ed01269d02bcf7e36e0de3696f6}}
+\index{OAM\_item\_t@{OAM\_item\_t}!tile@{tile}}
+\index{tile@{tile}!OAM\_item\_t@{OAM\_item\_t}}
+\doxyparagraph{\texorpdfstring{tile}{tile}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} O\+A\+M\+\_\+item\+\_\+t\+::tile}
+
+\mbox{\Hypertarget{struct_o_a_m__item__t_a435e018f3bbc0ebaa9eaf96806d386d9}\label{struct_o_a_m__item__t_a435e018f3bbc0ebaa9eaf96806d386d9}}
+\index{OAM\_item\_t@{OAM\_item\_t}!prop@{prop}}
+\index{prop@{prop}!OAM\_item\_t@{OAM\_item\_t}}
+\doxyparagraph{\texorpdfstring{prop}{prop}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} O\+A\+M\+\_\+item\+\_\+t\+::prop}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gb/\mbox{\hyperlink{gb_8h}{gb.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structatomic__flag.tex b/docs/latex/structatomic__flag.tex
new file mode 100644
index 00000000..c4c381d3
--- /dev/null
+++ b/docs/latex/structatomic__flag.tex
@@ -0,0 +1,25 @@
+\hypertarget{structatomic__flag}{}\doxysubsection{atomic\+\_\+flag Struct Reference}
+\label{structatomic__flag}\index{atomic\_flag@{atomic\_flag}}
+
+
+{\ttfamily \#include $<$stdatomic.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+unsigned char \mbox{\hyperlink{structatomic__flag_a4fe9312fe0abb35e9f3626dc06c89bc4}{flag}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structatomic__flag_a4fe9312fe0abb35e9f3626dc06c89bc4}\label{structatomic__flag_a4fe9312fe0abb35e9f3626dc06c89bc4}}
+\index{atomic\_flag@{atomic\_flag}!flag@{flag}}
+\index{flag@{flag}!atomic\_flag@{atomic\_flag}}
+\doxyparagraph{\texorpdfstring{flag}{flag}}
+{\footnotesize\ttfamily unsigned char atomic\+\_\+flag\+::flag}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdatomic_8h}{stdatomic.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structisr__nested__vector__t.tex b/docs/latex/structisr__nested__vector__t.tex
new file mode 100644
index 00000000..1ed25962
--- /dev/null
+++ b/docs/latex/structisr__nested__vector__t.tex
@@ -0,0 +1,33 @@
+\hypertarget{structisr__nested__vector__t}{}\doxysubsection{isr\+\_\+nested\+\_\+vector\+\_\+t Struct Reference}
+\label{structisr__nested__vector__t}\index{isr\_nested\_vector\_t@{isr\_nested\_vector\_t}}
+
+
+{\ttfamily \#include $<$isr.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structisr__nested__vector__t_a097ce850c38d6045af8f419a07a34b66}{opcode}} \mbox{[}2\mbox{]}
+\item
+void $\ast$ \mbox{\hyperlink{structisr__nested__vector__t_a4009f14b9912d9a852873e2019044d0c}{func}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structisr__nested__vector__t_a097ce850c38d6045af8f419a07a34b66}\label{structisr__nested__vector__t_a097ce850c38d6045af8f419a07a34b66}}
+\index{isr\_nested\_vector\_t@{isr\_nested\_vector\_t}!opcode@{opcode}}
+\index{opcode@{opcode}!isr\_nested\_vector\_t@{isr\_nested\_vector\_t}}
+\doxyparagraph{\texorpdfstring{opcode}{opcode}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} isr\+\_\+nested\+\_\+vector\+\_\+t\+::opcode\mbox{[}2\mbox{]}}
+
+\mbox{\Hypertarget{structisr__nested__vector__t_a4009f14b9912d9a852873e2019044d0c}\label{structisr__nested__vector__t_a4009f14b9912d9a852873e2019044d0c}}
+\index{isr\_nested\_vector\_t@{isr\_nested\_vector\_t}!func@{func}}
+\index{func@{func}!isr\_nested\_vector\_t@{isr\_nested\_vector\_t}}
+\doxyparagraph{\texorpdfstring{func}{func}}
+{\footnotesize\ttfamily void$\ast$ isr\+\_\+nested\+\_\+vector\+\_\+t\+::func}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gb/\mbox{\hyperlink{isr_8h}{isr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structisr__vector__t.tex b/docs/latex/structisr__vector__t.tex
new file mode 100644
index 00000000..654368dc
--- /dev/null
+++ b/docs/latex/structisr__vector__t.tex
@@ -0,0 +1,33 @@
+\hypertarget{structisr__vector__t}{}\doxysubsection{isr\+\_\+vector\+\_\+t Struct Reference}
+\label{structisr__vector__t}\index{isr\_vector\_t@{isr\_vector\_t}}
+
+
+{\ttfamily \#include $<$isr.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structisr__vector__t_a43f6e622239ba42a25d2d9624c0d8f0b}{opcode}}
+\item
+void $\ast$ \mbox{\hyperlink{structisr__vector__t_a978f0092183f75d20a0f7de7add24b50}{func}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structisr__vector__t_a43f6e622239ba42a25d2d9624c0d8f0b}\label{structisr__vector__t_a43f6e622239ba42a25d2d9624c0d8f0b}}
+\index{isr\_vector\_t@{isr\_vector\_t}!opcode@{opcode}}
+\index{opcode@{opcode}!isr\_vector\_t@{isr\_vector\_t}}
+\doxyparagraph{\texorpdfstring{opcode}{opcode}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} isr\+\_\+vector\+\_\+t\+::opcode}
+
+\mbox{\Hypertarget{structisr__vector__t_a978f0092183f75d20a0f7de7add24b50}\label{structisr__vector__t_a978f0092183f75d20a0f7de7add24b50}}
+\index{isr\_vector\_t@{isr\_vector\_t}!func@{func}}
+\index{func@{func}!isr\_vector\_t@{isr\_vector\_t}}
+\doxyparagraph{\texorpdfstring{func}{func}}
+{\footnotesize\ttfamily void$\ast$ isr\+\_\+vector\+\_\+t\+::func}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gb/\mbox{\hyperlink{isr_8h}{isr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structjoypads__t.tex b/docs/latex/structjoypads__t.tex
new file mode 100644
index 00000000..ae27207c
--- /dev/null
+++ b/docs/latex/structjoypads__t.tex
@@ -0,0 +1,78 @@
+\hypertarget{structjoypads__t}{}\doxysubsection{joypads\+\_\+t Struct Reference}
+\label{structjoypads__t}\index{joypads\_t@{joypads\_t}}
+
+
+{\ttfamily \#include $<$gb.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structjoypads__t_af84e3549a0708ee0e04295e5f853e9f5}{npads}}
+\item
+\begin{tabbing}
+xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
+union \{\\
+\>struct \{\\
+\>\>\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} \mbox{\hyperlink{structjoypads__t_a5e953c63dfb5148ba29f5735a735035f}{joy0}}\\
+\>\>\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} \mbox{\hyperlink{structjoypads__t_a032a279cf42e2737d6ce9893239d238e}{joy1}}\\
+\>\>\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} \mbox{\hyperlink{structjoypads__t_a5741138c91e93ea3203ee9e0d5d9413d}{joy2}}\\
+\>\>\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} \mbox{\hyperlink{structjoypads__t_ab281d26e5197e49633274f412b164295}{joy3}}\\
+\>\} \\
+\>\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} \mbox{\hyperlink{structjoypads__t_a8d181ece2d3db614ed6686cfba545238}{joypads}} \mbox{[}4\mbox{]}\\
+\}; \\
+
+\end{tabbing}\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Multiplayer joypad structure.
+
+Must be initialized with \mbox{\hyperlink{gb_8h_ab7e35e1eff44ed78ad8f0015c6e85b4e}{joypad\+\_\+init()}} first then it may be used to poll all avaliable joypads with \mbox{\hyperlink{gb_8h_a6e6f8eb1de2ae1ec9adeafbd7b9884db}{joypad\+\_\+ex()}}
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structjoypads__t_af84e3549a0708ee0e04295e5f853e9f5}\label{structjoypads__t_af84e3549a0708ee0e04295e5f853e9f5}}
+\index{joypads\_t@{joypads\_t}!npads@{npads}}
+\index{npads@{npads}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{npads}{npads}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::npads}
+
+\mbox{\Hypertarget{structjoypads__t_a5e953c63dfb5148ba29f5735a735035f}\label{structjoypads__t_a5e953c63dfb5148ba29f5735a735035f}}
+\index{joypads\_t@{joypads\_t}!joy0@{joy0}}
+\index{joy0@{joy0}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{joy0}{joy0}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::joy0}
+
+\mbox{\Hypertarget{structjoypads__t_a032a279cf42e2737d6ce9893239d238e}\label{structjoypads__t_a032a279cf42e2737d6ce9893239d238e}}
+\index{joypads\_t@{joypads\_t}!joy1@{joy1}}
+\index{joy1@{joy1}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{joy1}{joy1}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::joy1}
+
+\mbox{\Hypertarget{structjoypads__t_a5741138c91e93ea3203ee9e0d5d9413d}\label{structjoypads__t_a5741138c91e93ea3203ee9e0d5d9413d}}
+\index{joypads\_t@{joypads\_t}!joy2@{joy2}}
+\index{joy2@{joy2}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{joy2}{joy2}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::joy2}
+
+\mbox{\Hypertarget{structjoypads__t_ab281d26e5197e49633274f412b164295}\label{structjoypads__t_ab281d26e5197e49633274f412b164295}}
+\index{joypads\_t@{joypads\_t}!joy3@{joy3}}
+\index{joy3@{joy3}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{joy3}{joy3}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::joy3}
+
+\mbox{\Hypertarget{structjoypads__t_a8d181ece2d3db614ed6686cfba545238}\label{structjoypads__t_a8d181ece2d3db614ed6686cfba545238}}
+\index{joypads\_t@{joypads\_t}!joypads@{joypads}}
+\index{joypads@{joypads}!joypads\_t@{joypads\_t}}
+\doxyparagraph{\texorpdfstring{joypads}{joypads}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} joypads\+\_\+t\+::joypads\mbox{[}4\mbox{]}}
+
+\mbox{\Hypertarget{structjoypads__t_a3e7b2271c57548a5215ead71da2db349}\label{structjoypads__t_a3e7b2271c57548a5215ead71da2db349}}
+\doxyparagraph{\texorpdfstring{"@1}{@1}}
+{\footnotesize\ttfamily union \{ ... \} }
+
+
+
+The documentation for this struct was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+gb/\mbox{\hyperlink{gb_8h}{gb.\+h}}\item
+sms/\mbox{\hyperlink{sms_8h}{sms.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structmetasprite__t.tex b/docs/latex/structmetasprite__t.tex
new file mode 100644
index 00000000..ab28dea1
--- /dev/null
+++ b/docs/latex/structmetasprite__t.tex
@@ -0,0 +1,78 @@
+\hypertarget{structmetasprite__t}{}\doxysubsection{metasprite\+\_\+t Struct Reference}
+\label{structmetasprite__t}\index{metasprite\_t@{metasprite\_t}}
+
+
+{\ttfamily \#include $<$metasprites.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} \mbox{\hyperlink{structmetasprite__t_a2c3fea1f6b3354352823320c69a3e4bb}{dy}}
+\item
+\mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} \mbox{\hyperlink{structmetasprite__t_a67d2a6fb62059da39b54e975c4fbb324}{dx}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structmetasprite__t_ad68b2f80c08f2f7fc603c56af2e75a6f}{dtile}}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structmetasprite__t_ab61e73a65c5e8cb30d0d81bb7845d615}{props}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Metasprite sub-\/item structure
+\begin{DoxyParams}{Parameters}
+{\em dy} & (int8\+\_\+t) Y coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dx} & (int8\+\_\+t) X coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dtile} & (uint8\+\_\+t) Start tile relative to the metasprites own set of tiles \\
+\hline
+{\em props} & (uint8\+\_\+t) Property Flags\\
+\hline
+\end{DoxyParams}
+Metasprites are built from multiple \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (one for each sub-\/sprite) and a pool of tiles they reference. If a metasprite has multiple frames then each frame will be built from some number of \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (which may vary based on how many sprites are required for that particular frame).
+
+A metasprite frame is terminated with a \{metasprite\+\_\+end\} entry.
+
+Metasprite sub-\/item structure
+\begin{DoxyParams}{Parameters}
+{\em dy} & (int8\+\_\+t) Y coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dx} & (int8\+\_\+t) X coordinate of the sprite relative to the metasprite origin (pivot) \\
+\hline
+{\em dtile} & (uint8\+\_\+t) Start tile relative to the metasprites own set of tiles\\
+\hline
+\end{DoxyParams}
+Metasprites are built from multiple \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (one for each sub-\/sprite) and a pool of tiles they reference. If a metasprite has multiple frames then each frame will be built from some number of \mbox{\hyperlink{structmetasprite__t}{metasprite\+\_\+t}} items (which may vary based on how many sprites are required for that particular frame).
+
+A metasprite frame is terminated with a \{metasprite\+\_\+end\} entry.
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structmetasprite__t_a2c3fea1f6b3354352823320c69a3e4bb}\label{structmetasprite__t_a2c3fea1f6b3354352823320c69a3e4bb}}
+\index{metasprite\_t@{metasprite\_t}!dy@{dy}}
+\index{dy@{dy}!metasprite\_t@{metasprite\_t}}
+\doxyparagraph{\texorpdfstring{dy}{dy}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} metasprite\+\_\+t\+::dy}
+
+\mbox{\Hypertarget{structmetasprite__t_a67d2a6fb62059da39b54e975c4fbb324}\label{structmetasprite__t_a67d2a6fb62059da39b54e975c4fbb324}}
+\index{metasprite\_t@{metasprite\_t}!dx@{dx}}
+\index{dx@{dx}!metasprite\_t@{metasprite\_t}}
+\doxyparagraph{\texorpdfstring{dx}{dx}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aef44329758059c91c76d334e8fc09700}{int8\+\_\+t}} metasprite\+\_\+t\+::dx}
+
+\mbox{\Hypertarget{structmetasprite__t_ad68b2f80c08f2f7fc603c56af2e75a6f}\label{structmetasprite__t_ad68b2f80c08f2f7fc603c56af2e75a6f}}
+\index{metasprite\_t@{metasprite\_t}!dtile@{dtile}}
+\index{dtile@{dtile}!metasprite\_t@{metasprite\_t}}
+\doxyparagraph{\texorpdfstring{dtile}{dtile}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} metasprite\+\_\+t\+::dtile}
+
+\mbox{\Hypertarget{structmetasprite__t_ab61e73a65c5e8cb30d0d81bb7845d615}\label{structmetasprite__t_ab61e73a65c5e8cb30d0d81bb7845d615}}
+\index{metasprite\_t@{metasprite\_t}!props@{props}}
+\index{props@{props}!metasprite\_t@{metasprite\_t}}
+\doxyparagraph{\texorpdfstring{props}{props}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} metasprite\+\_\+t\+::props}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gb/\mbox{\hyperlink{gb_2metasprites_8h}{metasprites.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/structsfont__handle.tex b/docs/latex/structsfont__handle.tex
new file mode 100644
index 00000000..d99ba81d
--- /dev/null
+++ b/docs/latex/structsfont__handle.tex
@@ -0,0 +1,36 @@
+\hypertarget{structsfont__handle}{}\doxysubsection{sfont\+\_\+handle Struct Reference}
+\label{structsfont__handle}\index{sfont\_handle@{sfont\_handle}}
+
+
+{\ttfamily \#include $<$font.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} \mbox{\hyperlink{structsfont__handle_aa5a35bc92adbcfff5a531bf65da65630}{first\+\_\+tile}}
+\item
+void $\ast$ \mbox{\hyperlink{structsfont__handle_afa826a9e7aa0dc456bd342717eea1f89}{font}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Font handle structure
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{structsfont__handle_aa5a35bc92adbcfff5a531bf65da65630}\label{structsfont__handle_aa5a35bc92adbcfff5a531bf65da65630}}
+\index{sfont\_handle@{sfont\_handle}!first\_tile@{first\_tile}}
+\index{first\_tile@{first\_tile}!sfont\_handle@{sfont\_handle}}
+\doxyparagraph{\texorpdfstring{first\_tile}{first\_tile}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_aba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}} sfont\+\_\+handle\+::first\+\_\+tile}
+
+First tile used for font \mbox{\Hypertarget{structsfont__handle_afa826a9e7aa0dc456bd342717eea1f89}\label{structsfont__handle_afa826a9e7aa0dc456bd342717eea1f89}}
+\index{sfont\_handle@{sfont\_handle}!font@{font}}
+\index{font@{font}!sfont\_handle@{sfont\_handle}}
+\doxyparagraph{\texorpdfstring{font}{font}}
+{\footnotesize\ttfamily void$\ast$ sfont\+\_\+handle\+::font}
+
+Pointer to the base of the font
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gbdk/\mbox{\hyperlink{font_8h}{font.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/tabu_doxygen.sty b/docs/latex/tabu_doxygen.sty
new file mode 100644
index 00000000..3f17d1d0
--- /dev/null
+++ b/docs/latex/tabu_doxygen.sty
@@ -0,0 +1,2557 @@
+%%
+%% This is file `tabu.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabu.dtx (with options: `package')
+%%
+%% This is a generated file.
+%% Copyright (FC) 2010-2011 - lppl
+%%
+%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars
+%%
+%% **********************************************************************************************
+%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal
+%% \begin{tabu} to { preamble } => target specified
+%% \begin{tabu} spread { preamble } => target relative to the ``natural width''
+%%
+%% tabu works in text and in math modes.
+%%
+%% X columns: automatic width adjustment + horizontal and vertical alignment
+%% \begin{tabu} { X[4c] X[1c] X[-2ml] }
+%%
+%% Horizontal lines and / or leaders:
+%% \hline\hline => double horizontal line
+%% \firsthline\hline => for nested tabulars
+%% \lasthline\hline => for nested tabulars
+%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader)
+%% Automatic lines / leaders :
+%% \everyrow{\hline\hline}
+%%
+%% Vertical lines and / or leaders:
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] }
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] }
+%%
+%% Fixed vertical spacing adjustment:
+%% \extrarowheight= \extrarowdepth=
+%% or: \extrarowsep= => may be prefixed by \global
+%%
+%% Dynamic vertical spacing adjustment:
+%% \abovetabulinesep= \belowtabulinesep=
+%% or: \tabulinesep= => may be prefixed by \global
+%%
+%% delarray.sty shortcuts: in math and text modes
+%% \begin{tabu} .... \({ preamble }\)
+%%
+%% Algorithms reports:
+%% \tracingtabu=1 \tracingtabu=2
+%%
+%% **********************************************************************************************
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work consists of the main source file tabu.dtx
+%% and the derived files
+%% tabu.sty, tabu.pdf, tabu.ins
+%%
+%% tabu : Flexible LaTeX tabulars
+%% lppl copyright 2010-2011 by FC
+%%
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen]
+\RequirePackage{array}[2008/09/09]
+\RequirePackage{varwidth}[2009/03/30]
+\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined}
+\let\tabu@AtEnd\@empty
+\def\TMP@EnsureCode#1={%
+ \edef\tabu@AtEnd{\tabu@AtEnd
+ \catcode#1 \the\catcode#1}%
+ \catcode#1=%
+}% \TMP@EnsureCode
+\TMP@EnsureCode 33 = 12 % !
+\TMP@EnsureCode 58 = 12 % : (for siunitx)
+\TMP@EnsureCode124 = 12 % |
+\TMP@EnsureCode 36 = 3 % $ = math shift
+\TMP@EnsureCode 38 = 4 % & = tab alignment character
+\TMP@EnsureCode 32 = 10 % space
+\TMP@EnsureCode 94 = 7 % ^
+\TMP@EnsureCode 95 = 8 % _
+%% Constants --------------------------------------------------------
+\newcount \c@taburow \def\thetaburow {\number\c@taburow}
+\newcount \tabu@nbcols
+\newcount \tabu@cnt
+\newcount \tabu@Xcol
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcount \tabu@alloc \tabu@alloc=\m@ne
+\newcount \tabu@nested
+\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc}
+\newdimen \tabu@target
+\newdimen \tabu@spreadtarget
+\newdimen \tabu@naturalX
+\newdimen \tabucolX
+\let\tabu@DELTA \@tempdimc
+\let\tabu@thick \@tempdima
+\let\tabu@on \@tempdimb
+\let\tabu@off \@tempdimc
+\newdimen \tabu@Xsum
+\newdimen \extrarowdepth
+\newdimen \abovetabulinesep
+\newdimen \belowtabulinesep
+\newdimen \tabustrutrule \tabustrutrule \z@
+\newtoks \tabu@thebody
+\newtoks \tabu@footnotes
+\newsavebox \tabu@box
+\newsavebox \tabu@arstrutbox
+\newsavebox \tabu@hleads
+\newsavebox \tabu@vleads
+\newif \iftabu@colortbl
+\newif \iftabu@siunitx
+\newif \iftabu@measuring
+\newif \iftabu@spread
+\newif \iftabu@negcoef
+\newif \iftabu@everyrow
+\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue}
+\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse}
+\newif \iftabu@long
+\newif \iftabuscantokens
+\def\tabu@rescan {\tabu@verbatim \scantokens }
+%% Utilities (for internal usage) -----------------------------------
+\def\tabu@gobblespace #1 {#1}
+\def\tabu@gobbletoken #1#2{#1}
+\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex}
+\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble
+ \else\ifx \@sptoken\@let@token
+ \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX
+ \fi\fi
+}% \tabu@gobblex
+\def\tabu@X{^^J}
+{\obeyspaces
+\global\let\tabu@spxiii= % saves an active space (for \ifx)
+\gdef\tabu@@spxiii{ }}
+\def\tabu@ifenvir {% only for \multicolumn
+ \expandafter\tabu@if@nvir\csname\@currenvir\endcsname
+}% \tabu@ifenvir
+\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else
+ \ifx\longtabu#1first\else
+ second\fi\fi oftwo\endcsname
+}% \tabu@ifenvir
+\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi}
+{\catcode`\&=3
+\gdef\tabu@strtrim #1{% #1 = control sequence to trim
+ \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi
+ \let\tabu@c@l@r \@empty \let#1\@empty
+ \else \expandafter \tabu@trimspaces #1\@nnil
+ \fi
+}% \tabu@strtrim
+\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }%
+\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&}
+\gdef\tabu@lastspace #1{\def #3{#1}%
+ \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi
+ \tabu@trimspaces #1\@nnil}
+}% \catcode
+\def\tabu@sanitizearg #1#2{{%
+ \csname \ifcsname if@safe@actives\endcsname %
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2%
+ \expandafter}\expandafter\def\expandafter#2\expandafter{#2}%
+}% \tabu@sanitizearg
+\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}%
+ \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!!
+}% \tabu@textbar
+\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi}
+\def\tabu@everyrow@egroup{%
+ \iftabu@everyrow \expandafter \endgroup \the\toks@
+ \else \ifnum0=`{\fi}%
+ \fi
+}% \tabu@everyrow@egroup
+\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \z@}%
+}% \tabu@arstrut
+\def\tabu@rearstrut {%
+ \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax
+ \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax
+ \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima
+ \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi
+ \tabu@mkarstrut
+ \fi
+}% \tabu@rearstrut
+\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi}
+\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox
+ \hbox to\z@{\hbox to\z@{\hss
+ {\tabu@DBG{cyan}\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \z@
+ width \tabustrutrule}\kern-\tabustrutrule
+ {\tabu@DBG{pink}\vrule
+ height \z@
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \tabustrutrule}}}%
+}% \tabu@DBG@arstrut
+\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@
+ \@nextchar}}%
+\def\tabu@savedecl{\ifcat$\d@llarend\else
+ \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
+}% \tabu@savedecl
+\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@}
+\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k }
+\let\tabu@trialh@@k \@empty
+\def\tabu@nowrite #1#{{\afterassignment}\toks@}
+\let\tabu@write\write
+\let\tabu@immediate\immediate
+\def\tabu@WRITE{\begingroup
+ \def\immediate\write{\aftergroup\endgroup
+ \tabu@immediate\tabu@write}%
+}% \tabu@WRITE
+\expandafter\def\expandafter\tabu@GenericError\expandafter{%
+ \expandafter\tabu@WRITE\GenericError}
+\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}}
+\def\tabu@noxfootnote [#1]{\@gobble}
+\def\tabu@nocolor #1#{\@gobble}
+\newcommand*\tabu@norowcolor[2][]{}
+\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}%
+ \futurelet\@let@token \tabu@m@ybesiunitx}
+\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {%
+ \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi
+ \tabu@temp}% \tabu@m@ybesiunitx
+}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname
+\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}%
+%% Fixed vertical spacing adjustment: \extrarowsep ------------------
+\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}%
+ \iftabu@everyrow \aftergroup\tabu@Gextra
+ \else \aftergroup\tabu@n@Gextra
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra
+}% \extrarowsep
+\def\tabu@extra {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setextrasep \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extra
+\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@extr@ #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extr@
+\def\tabu@setextrasep {\extrarowheight=\extrarowdepth
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+}% \tabu@setextrasep
+\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi}
+\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi}
+\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra}
+\let\tabu@C@extra \z@
+\let\tabu@G@extra \@empty
+%% Dynamic vertical spacing adjustment: \tabulinesep ----------------
+\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}%
+ \iftabu@everyrow \aftergroup\tabu@Glinesep
+ \else \aftergroup\tabu@n@Glinesep
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep
+}% \tabulinesep
+\def\tabu@linesep {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setlinesep \abovetabulinesep
+ \fi \tabu@temp}%
+}% \tabu@linesep
+\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@sets@p #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+ \fi \tabu@temp}%
+}% \tabu@sets@p
+\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+}% \tabu@setlinesep
+\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi}
+\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi}
+\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep}
+\let\tabu@C@linesep \z@
+\let\tabu@G@linesep \@empty
+%% \global\extrarowsep and \global\tabulinesep -------------------
+\def\tabu@Gsave #1#2#3#4{\xdef#1{#1%
+ \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}%
+}% \tabu@Gsave
+\def\tabu@Grestore#1#2{%
+ \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax
+ \ifcat$\the\toks\currentgrouplevel$\else
+ \global\let#1\@empty \global\let#2\z@
+ \the\toks\currentgrouplevel
+ \fi
+}% \tabu@Grestore
+%% Setting code for every row ---------------------------------------
+\newcommand*\everyrow{\tabu@everyrow@bgroup
+ \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop
+}% \everyrow
+\def\tabu@evrstartstop {\@ifnextchar^%
+ {\afterassignment \tabu@evrstartstop \tabu@stop=}%
+ {\ifx ^\@let@token
+ \afterassignment\tabu@evrstartstop \tabu@start=%
+ \else \afterassignment\tabu@everyr@w \toks@
+ \fi}%
+}% \tabu@evrstartstop
+\def\tabu@everyr@w {%
+ \xdef\tabu@everyrow{%
+ \noexpand\tabu@everyrowfalse
+ \let\noalign \relax
+ \noexpand\tabu@rowfontreset
+ \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors
+ \let\noexpand\tabu@docline \noexpand\tabu@docline@evr
+ \the\toks@
+ \noexpand\tabu@evrh@@k
+ \noexpand\tabu@rearstrut
+ \global\advance\c@taburow \@ne}%
+ \iftabu@everyrow \toks@\expandafter
+ {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}%
+ \else \xdef\tabu@evr@G{\the\toks@}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@everyr@w
+\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only
+\tabu@evr{}
+%% line style and leaders -------------------------------------------
+\newcommand*\newtabulinestyle [1]{%
+ {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}%
+}% \newtabulinestyle
+\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}%
+ \tabu@sanitizearg {#1}\@tempa
+ \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi
+ \global\expandafter\let
+ \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi
+}% \tabu@newlinestyle
+\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}%
+ \iftabu@everyrow
+ \toks@\expandafter{\expandafter \def \expandafter
+ \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}%
+ \gdef\tabu@ls@{\tabu@ls@L}%
+ \else
+ \global\let\tabu@ls@G \tabu@thestyle
+ \gdef\tabu@ls@{\tabu@ls@G}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabulinestyle
+\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor}
+\def\tabu@rulecolor #1{\toks@{}%
+ \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1%
+ \tabu@temp
+ \tabu@rulearc
+}% \tabu@rulecolor
+\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp
+ \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}%
+ \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}%
+ \fi
+ \tabu@temp
+}% \tabu@ruledrsc@
+\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}}
+\def\tabu@rule@drsc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}%
+ \else \toks@{\def\CT@drsc@{\color #1{#2}}}%
+ \fi
+ \else
+ \ifx \\#1#2\\\global\let\CT@drsc@ \relax
+ \else \gdef\CT@drsc@{\color #1{#2}}%
+ \fi
+ \fi
+ \tabu@rulearc
+}% \tabu@rule@drsc@
+\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}}
+\def\tabu@rule@arc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}%
+ \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}%
+ \fi
+ \toks@\expandafter{\the\toks@
+ \let\tabu@arc@L \CT@arc@
+ \let\tabu@drsc@L \CT@drsc@
+ \ignorespaces}%
+ \else
+ \ifx \\#1#2\\\gdef\CT@arc@{}%
+ \else \gdef\CT@arc@{\color #1{#2}}%
+ \fi
+ \global\let\tabu@arc@G \CT@arc@
+ \global\let\tabu@drsc@G \CT@drsc@
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rule@arc@
+\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1}
+\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}}
+\def\tabu@rowc@lors #1#2#3{%
+ \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil
+ \@defaultunits \tabu@start =\number0#1\relax \@nnil
+ \ifnum \count@<\tw@ \count@=\tw@ \fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start<\z@ \tabu@start \z@ \fi
+ \tabu@rowcolorseries #3\in@..\in@ \@nnil
+}% \tabu@rowcolors
+\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {%
+ \ifx \in@#1\relax
+ \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}%
+ \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \else
+ \ifx \\#2\\\tabu@rowcolorserieserror \fi
+ \tabu@sanitizearg{#1}\tabu@temp
+ \tabu@sanitizearg{#2}\@tempa
+ \advance\count@ \m@ne
+ \iftabu@everyrow
+ \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{%
+ \ifnum ##2=\c@taburow
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi
+ \ifnum \c@taburow<##2 \else
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}\fi}%
+ }\edef\x{\noexpand\tabu@rc@ {\the\count@}
+ {\the\tabu@start}
+ {\tabu@temp}
+ {\@tempa}%
+ }\x
+ \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}%
+ \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}%
+ \else % inside \noalign
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}%
+ \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}%
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}%
+ \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{%
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}}%
+ }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x
+ \global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rowcolorseries
+\tabuDisableCommands {\let\tabu@rc@ \@empty }
+\def\tabu@rowcolorserieserror {\PackageError{tabu}
+ {Invalid syntax for \string\taburowcolors
+ \MessageBreak Please look at the documentation!}\@ehd
+}% \tabu@rowcolorserieserror
+\newcommand*\tabureset {%
+ \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@
+ \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}%
+}% \tabureset
+%% Parsing the line styles ------------------------------------------
+\def\tabu@getline #1{\begingroup
+ \csname \ifcsname if@safe@actives\endcsname %
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa
+ \let\tabu@thestyle \relax
+ \ifcsname tabu@linestyle@\@tempa \endcsname
+ \edef\tabu@thestyle{\endgroup
+ \def\tabu@thestyle{\expandafter\noexpand
+ \csname tabu@linestyle@\@tempa\endcsname}%
+ }\tabu@thestyle
+ \else \expandafter\tabu@definestyle \tabu@temp \@nil
+ \fi
+}% \tabu@getline
+\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter
+ \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen
+ \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined
+ \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs
+ \def\tabu@temp{\tabu@getparam{thick}}%
+ \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}%
+ \fi
+ {%
+ \let\tabu@ \relax
+ \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-))
+ \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}%
+ \expandafter}\expandafter
+ \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-)
+ \def\;{\def\:}%
+ \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10)
+ \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-)
+ \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi
+ \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi
+ \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi
+ \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen
+ \tabu@on \tabulineon \fi\fi
+ \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen
+ \tabu@off \tabulineoff \fi\fi
+ \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi
+ \in@true %
+ \else \in@false %
+ \fi
+ \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}%
+ \else \edef\tabu@thick{\the\tabu@thick}%
+ \fi
+ \edef \tabu@thestyle ##1##2{\endgroup
+ \def\tabu@thestyle{%
+ \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick}
+ {\the\tabu@on}{##1}
+ {\the\tabu@off}{##2}%
+ \else \noexpand\tabu@rulesstyle
+ {##1\vrule width \tabu@thick}%
+ {##1\leaders \hrule height \tabu@thick \hfil}%
+ \fi}%
+ }\expandafter \expandafter
+ \expandafter \tabu@thestyle \expandafter
+ \expandafter \expandafter
+ {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}%
+}% \tabu@definestyle
+{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active
+ \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}}
+ \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space}
+}% \catcode
+\def\tabu@oxiii #1{%
+ \ifcase \ifx n#1\z@ \else
+ \ifx f#1\@ne\else
+ \tw@ \fi\fi
+ \expandafter\tabu@onxiii
+ \or \expandafter\tabu@ofxiii
+ \else o%
+ \fi#1}%
+\def\tabu@onxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx \tabu@spxiii#2\@ne\else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{on}#2\expandafter\@gobble
+ \or \expandafter\tabu@onxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}%
+\def\tabu@ofxiii #1#2{%
+ \ifx #2f\expandafter\tabu@offxiii
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@offxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx\tabu@spxiii#2\@ne \else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{off}#2\expandafter\@gobble
+ \or \expandafter\tabu@offxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=}
+\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef
+ \ifx \tabu@#1\else % no more spec
+ \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi
+}% \tabu@getcolor
+\def\tabu@getc@l@r #1\tabu@ {%
+ \def\tabu@temp{#1}\tabu@strtrim \tabu@temp
+ \ifx \tabu@temp\@empty
+ \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists
+ \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r
+ \else \let\tabu@c@lon \tabu@c@l@r
+ \fi
+ %\else \tabu@warncolour{\tabu@temp}%
+ \fi%\fi
+ \tabu@ % next spec
+}% \tabu@getc@l@r
+\def\tabu@warncolour #1{\PackageWarning{tabu}
+ {Color #1 is not defined. Default color used}%
+}% \tabu@warncolour
+\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}%
+ \ifx \tabu@leaders\tabu@leaders@G \else
+ \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi
+}% \tabu@leadersstyle
+\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined
+ \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}%
+}% \tabu@rulesstyle
+%% The leaders boxes ------------------------------------------------
+\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor
+ {% % but the leaders boxes should have colors !
+ \def\@therule{\vrule}\def\@thick{height}\def\@length{width}%
+ \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}%
+ \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thehleaders \tabu@theleaders
+ }%
+ {%
+ \def\@therule{\hrule}\def\@thick{width}\def\@length{height}%
+ \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}%
+ \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thevleaders \tabu@theleaders
+ }%
+ \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}%
+ }%
+}% \tabu@LEADERS
+\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@}
+\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ \global\setbox \tabu@leads=\@box{%
+ {#3\tabu@therule{#1}{#2}}%
+ \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi
+ {#3\tabu@therule{#1}{#2}}}%
+ \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss
+ {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}%
+ \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {%
+ {##1\tabu@therule{#1}{#2}}%
+ \xleaders \copy\tabu@leads \@ss
+ \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}%
+ }\tabu@theleaders{#3}%
+}% \tabu@l@@d@rs
+%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ----------
+\newcommand*\tabu {\tabu@longfalse
+ \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}%
+ \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endtabu*\endcsname{\endtabu}%
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {tabu}
+\let\tabu@tabular \tabular %
+\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu}
+\newcommand*\longtabu {\tabu@longtrue
+ \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
+ \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
+ \LTchunksize=\@M
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
+ \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {longtabu}
+\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu}
+\def\tabu@nolongtabu{\PackageError{tabu}
+ {longtabu requires the longtable package}\@ehd}
+%% Read the target and then : \tabular or \@array ------------------
+\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget }
+\def\tabu@sett@rget {\tabu@target \z@
+ \ifcase \ifx \bgroup\@let@token \z@ \else
+ \ifx \@sptoken\@let@token \@ne \else
+ \if t\@let@token \tw@ \else
+ \if s\@let@token \thr@@\else
+ \z@\fi\fi\fi\fi
+ \expandafter\tabu@begin
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget
+ \or \expandafter\tabu@to
+ \or \expandafter\tabu@spread
+ \fi
+}% \tabu@sett@rget
+\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget}
+\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget}
+\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target }
+\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget }
+\def\tabu@linegoalt@rget {%
+ \ifx \tabu@temp\LNGL@setlinegoal
+ \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
+ \tabu@begin
+}% \tabu@linegoalt@rget
+\def\tabu@begin #1#{%
+ \iftabu@measuring \expandafter\tabu@nestedmeasure \fi
+ \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty
+ \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}%
+ \fi
+ \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil
+}% \tabu@begin
+\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup
+ \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}%
+ \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }%
+}% \tabu@tabu@
+\def\tabu@nestedmeasure {%
+ \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax
+ \tabu@spreadtrue
+ \else \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}%
+ \expandafter\tabu@collectbody\expandafter\tabu@quickrule
+ \expandafter\endgroup
+ \fi
+}% \tabu@nestedmeasure
+\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target}
+%% \tabu@setup \tabu@init \tabu@indent
+\def\tabu@setup{\tabu@alloc@
+ \ifcase \tabu@nested
+ \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
+ \let\tabu@afterendpar \par
+ \fi\fi\fi
+ \def\tabu@aligndefault{c}\tabu@init \tabu@indent
+ \else %
+ \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
+ \fi
+ \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
+ \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
+ \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
+ \let\@endpbox \tabu@endpbox % idem " " " " " "
+ \let\@tabarray \tabu@tabarray % idem " " " " " "
+ \tabu@setcleanup \tabu@setreset
+}% \tabu@setup
+\def\tabu@init{\tabu@starttimer \tabu@measuringfalse
+ \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}%
+ \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline
+ \let\firstline \tabu@firstline \let\lastline \tabu@lastline
+ \let\hline \tabu@hline \let\@xhline \tabu@xhline
+ \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox
+ \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi
+ \tabu@trivlist %
+ \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
+ \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering
+ \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft
+ \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering
+ \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft
+ \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont
+ \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x
+ \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar
+ \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok
+ \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn
+ \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!!
+ \let\tabu@endpbox \@endpbox % idem " " " " " " "
+ \let\tabu@tabarray \@tabarray % idem " " " " " " "
+ \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray)
+ \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi
+}% \tabu@init
+\def\tabu@indent{% correction for indentation
+ \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
+ \everypar\expandafter{%
+ \the\everypar\everypar\expandafter{\the\everypar}%
+ \setbox\z@=\lastbox
+ \ifdim\wd\z@>\z@ \edef\tabu@thetarget
+ {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi
+ \box\z@}%
+ \fi\fi
+}% \tabu@indent
+\def\tabu@setcleanup {% saves last global assignments
+ \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax
+ \def\tabu@aftergroupcleanup{%
+ \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}%
+ \else
+ \def\tabu@aftergroupcleanup{%
+ \aftergroup\aftergroup\aftergroup\tabu@cleanup
+ \let\tabu@aftergroupcleanup \relax}%
+ \fi
+ \let\tabu@arc@Gsave \tabu@arc@G
+ \let\tabu@arc@G \tabu@arc@L %
+ \let\tabu@drsc@Gsave \tabu@drsc@G
+ \let\tabu@drsc@G \tabu@drsc@L %
+ \let\tabu@ls@Gsave \tabu@ls@G
+ \let\tabu@ls@G \tabu@ls@L %
+ \let\tabu@rc@Gsave \tabu@rc@G
+ \let\tabu@rc@G \tabu@rc@L %
+ \let\tabu@evr@Gsave \tabu@evr@G
+ \let\tabu@evr@G \tabu@evr@L %
+ \let\tabu@celllalign@save \tabu@celllalign
+ \let\tabu@cellralign@save \tabu@cellralign
+ \let\tabu@cellleft@save \tabu@cellleft
+ \let\tabu@cellright@save \tabu@cellright
+ \let\tabu@@celllalign@save \tabu@@celllalign
+ \let\tabu@@cellralign@save \tabu@@cellralign
+ \let\tabu@@cellleft@save \tabu@@cellleft
+ \let\tabu@@cellright@save \tabu@@cellright
+ \let\tabu@rowfontreset@save \tabu@rowfontreset
+ \let\tabu@@rowfontreset@save\tabu@@rowfontreset
+ \let\tabu@rowfontreset \@empty
+ \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset
+ \edef\c@taburow@save {\the\c@taburow}%
+ \edef\tabu@naturalX@save {\the\tabu@naturalX}%
+ \let\tabu@naturalXmin@save \tabu@naturalXmin
+ \let\tabu@naturalXmax@save \tabu@naturalXmax
+ \let\tabu@mkarstrut@save \tabu@mkarstrut
+ \edef\tabu@clarstrut{%
+ \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax
+ \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax
+ \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}%
+}% \tabu@setcleanup
+\def\tabu@cleanup {\begingroup
+ \globaldefs\@ne \tabu@everyrowtrue
+ \let\tabu@arc@G \tabu@arc@Gsave
+ \let\CT@arc@ \tabu@arc@G
+ \let\tabu@drsc@G \tabu@drsc@Gsave
+ \let\CT@drsc@ \tabu@drsc@G
+ \let\tabu@ls@G \tabu@ls@Gsave
+ \let\tabu@ls@ \tabu@ls@G
+ \let\tabu@rc@G \tabu@rc@Gsave
+ \let\tabu@rc@ \tabu@rc@G
+ \let\CT@do@color \relax
+ \let\tabu@evr@G \tabu@evr@Gsave
+ \let\tabu@celllalign \tabu@celllalign@save
+ \let\tabu@cellralign \tabu@cellralign@save
+ \let\tabu@cellleft \tabu@cellleft@save
+ \let\tabu@cellright \tabu@cellright@save
+ \let\tabu@@celllalign \tabu@@celllalign@save
+ \let\tabu@@cellralign \tabu@@cellralign@save
+ \let\tabu@@cellleft \tabu@@cellleft@save
+ \let\tabu@@cellright \tabu@@cellright@save
+ \let\tabu@rowfontreset \tabu@rowfontreset@save
+ \let\tabu@@rowfontreset \tabu@@rowfontreset@save
+ \tabu@naturalX =\tabu@naturalX@save
+ \let\tabu@naturalXmax \tabu@naturalXmax@save
+ \let\tabu@naturalXmin \tabu@naturalXmin@save
+ \let\tabu@mkarstrut \tabu@mkarstrut@save
+ \c@taburow =\c@taburow@save
+ \ifcase \tabu@nested \tabu@alloc \m@ne\fi
+ \endgroup %
+ \ifcase \tabu@nested
+ \the\tabu@footnotes \global\tabu@footnotes{}%
+ \tabu@afterendpar \tabu@elapsedtime
+ \fi
+ \tabu@clarstrut
+ \everyrow\expandafter {\tabu@evr@G}%
+}% \tabu@cleanup
+\let\tabu@afterendpar \relax
+\def\tabu@setreset {%
+ \edef\tabu@savedparams {% \relax for \tabu@message@save
+ \ifmmode \col@sep \the\arraycolsep
+ \else \col@sep \the\tabcolsep \fi \relax
+ \arrayrulewidth \the\arrayrulewidth \relax
+ \doublerulesep \the\doublerulesep \relax
+ \extratabsurround \the\extratabsurround \relax
+ \extrarowheight \the\extrarowheight \relax
+ \extrarowdepth \the\extrarowdepth \relax
+ \abovetabulinesep \the\abovetabulinesep \relax
+ \belowtabulinesep \the\belowtabulinesep \relax
+ \def\noexpand\arraystretch{\arraystretch}%
+ \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}%
+ \begingroup
+ \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu
+ \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi
+ \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi
+ \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L
+ \expandafter \endgroup \expandafter
+ \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena
+ \let\tabu@arc@G \tabu@arc@L
+ \let\tabu@drsc@G \tabu@drsc@L
+ \let\tabu@ls@G \tabu@ls@L
+ \let\tabu@rc@G \tabu@rc@L
+ \let\tabu@evr@G \tabu@evr@L}%
+ \def\tabu@reset{\tabu@savedparams
+ \tabu@everyrowtrue \c@taburow \z@
+ \let\CT@arc@ \tabu@arc@L
+ \let\CT@drsc@ \tabu@drsc@L
+ \let\tabu@ls@ \tabu@ls@L
+ \let\tabu@rc@ \tabu@rc@L
+ \global\tabu@alloc \tabu@alloc@save
+ \everyrow\expandafter{\tabu@evr@L}}%
+}% \tabu@reset
+\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}}
+\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}}
+%% The Rewriting Process -------------------------------------------
+\def\tabu@newcolumntype #1{%
+ \expandafter\tabu@new@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@newcolumntype
+\def\tabu@new@columntype #1#2#3{%
+ \def#1##1#3{\NC@{##1}}%
+ \let#2\relax \newcommand*#2%
+}% \tabu@new@columntype
+\def\tabu@privatecolumntype #1{%
+ \expandafter\tabu@private@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\expandafter\endcsname
+ \csname tabu@NC@find@\string#1\expandafter\endcsname
+ \csname tabu@NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@privatecolumntype
+\def\tabu@private@columntype#1#2#3#4{%
+ \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}%
+ \tabu@new@columntype#3#4%
+}% \tabu@private@columntype
+\let\tabu@privatecolumns \@empty
+\newcommand*\tabucolumn [1]{\expandafter \def \expandafter
+ \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns
+ \NC@do #1}}%
+\let\tabu@highprioritycolumns \@empty
+%% The | ``column'' : rewriting process --------------------------
+\tabu@privatecolumntype |{\tabu@rewritevline}
+\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}%
+ \expandafter \NC@find \tabu@rewritten}
+\def\tabu@lines #1{%
+ \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi
+ \NC@list\expandafter{\the\NC@list \NC@do #1}%
+}% \tabu@lines@
+\def\tabu@vlinearg #1{%
+ \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}%
+ \else\tabu@getline {#1}%
+ \fi
+ \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}%
+ }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}%
+ \expandafter \tabu@keepls \tabu@thestyle \@nil
+}% \tabu@vlinearg
+\def\tabu@keepls #1\@nil{%
+ \ifcat $\@cdr #1\@nil $%
+ \ifx \relax#1\else
+ \ifx \tabu@ls@#1\else
+ \let#1\relax
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@savels\noexpand#1}\fi\fi\fi
+}% \tabu@keepls
+\def\tabu@thevline {\begingroup
+ \ifdefined\tabu@leaders
+ \setbox\@tempboxa=\vtop to\dimexpr
+ \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}%
+ \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox
+ \box\@tempboxa
+ \else
+ \tabu@thevrule
+ \fi \endgroup
+}% \tabu@thevline
+\def\tabu@savels #1{%
+ \expandafter\let\csname\string#1\endcsname #1%
+ \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset
+ \tabu@resetls#1}}%
+\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}%
+%% \multicolumn inside tabu environment -----------------------------
+\tabu@newcolumntype \tabu@rewritemulticolumn{%
+ \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}%
+ \let\tabu@savels \relax
+ \NC@find
+}% \tabu@rewritemulticolumn
+\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup}
+\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI}
+\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup
+ \tabu@everyrowtrue
+ \NC@list{\NC@do \tabu@rewritemulticolumn}%
+ \expandafter\@gobbletwo % gobbles \multispan{#1}
+ \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}%
+ {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi
+ {#3}}%
+}% \tabu@multic@lumn
+%% The X column(s): rewriting process -----------------------------
+\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}}
+\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten }
+\def\tabu@siunitx #1{\@ifnextchar \bgroup
+ {\tabu@rewriteX@Ss{#1}}
+ {\tabu@nosiunitx{#1}}}
+\def\tabu@rewriteX@Ss #1#2{\@temptokena{}%
+ \@defaultunits \let\tabu@temp =#2\relax\@nnil
+ \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi
+ \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}%
+ }\expandafter\NC@find \the\@temptokena \relax
+ }\expandafter\NC@rewrite@S \@gobble #2\relax
+ \else \tabu@siunitxerror
+ \fi
+ \expandafter \NC@find \tabu@rewritten
+}% \tabu@rewriteX@Ss
+\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column !
+ \MessageBreak X column can only embed siunitx S or s columns}\@ehd
+}% \tabu@siunitxerror
+\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}%
+ \iftabu@measuring
+ \else \tabu@measuringtrue % first X column found in the preamble
+ \let\@halignto \relax \let\tabu@halignto \relax
+ \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@
+ \else \tabu@spreadtarget \z@ \fi
+ \ifdim \tabu@target=\z@
+ \setlength\tabu@target \tabu@thetarget
+ \tabu@message{\tabu@message@defaulttarget}%
+ \else \tabu@message{\tabu@message@target}\fi
+ \fi
+}% \tabu@rewriteX
+\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax
+ \def\tabu@rewritten{l}}
+\def\tabu@Xarg #1#2#3{%
+ \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty
+ \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty
+ \ifx\\#1\\%
+ \def\tabu@rewritten{p}\tabucolX \p@ %
+ \else
+ \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@
+ \tabu@Xparse {}#1\relax
+ \fi
+ \tabu@Xrewritten{#2}{#3}%
+}% \tabu@Xarg
+\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
+\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
+\def\tabu@Xtest{%
+ \ifcase \ifx \relax\@let@token \z@ \else
+ \if ,\@let@token \m@ne\else
+ \if p\@let@token 1\else
+ \if m\@let@token 2\else
+ \if b\@let@token 3\else
+ \if l\@let@token 4\else
+ \if c\@let@token 5\else
+ \if r\@let@token 6\else
+ \if j\@let@token 7\else
+ \if L\@let@token 8\else
+ \if C\@let@token 9\else
+ \if R\@let@token 10\else
+ \if J\@let@token 11\else
+ \ifx \@sptoken\@let@token 12\else
+ \if .\@let@token 13\else
+ \if -\@let@token 13\else
+ \ifcat $\@let@token 14\else
+ 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \or \tabu@Xtype {p}%
+ \or \tabu@Xtype {m}%
+ \or \tabu@Xtype {b}%
+ \or \tabu@Xalign \raggedright\relax
+ \or \tabu@Xalign \centering\relax
+ \or \tabu@Xalign \raggedleft\relax
+ \or \tabu@Xalign \tabu@justify\relax
+ \or \tabu@Xalign \RaggedRight\raggedright
+ \or \tabu@Xalign \Centering\centering
+ \or \tabu@Xalign \RaggedLeft\raggedleft
+ \or \tabu@Xalign \justifying\tabu@justify
+ \or \expandafter \tabu@Xparsespace
+ \or \expandafter \tabu@Xcoef
+ \or \expandafter \tabu@Xm@th
+ \or \tabu@Xcoef{}%
+ \else\expandafter \tabu@Xparse
+ \fi
+}% \tabu@Xtest
+\def\tabu@Xalign #1#2{%
+ \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu}
+ {Duplicate horizontal alignment specification}\fi
+ \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax
+ \else \def\tabu@Xlcr{#2}\let#2\relax\fi
+ \expandafter\tabu@Xparse
+}% \tabu@Xalign
+\def\tabu@Xtype #1{%
+ \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu}
+ {Duplicate vertical alignment specification}\fi
+ \def\tabu@rewritten{#1}\expandafter\tabu@Xparse
+}% \tabu@Xtype
+\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}%
+ \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi
+}% \tabu@Xcoef
+\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@
+ \tabu@Xparse{}%
+}% \tabu@Xc@ef
+\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp}
+\def\tabu@Xd@sp{\let\tabu@Xmath=$%
+ \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}%
+ \expandafter\tabu@Xparse
+ \else \expandafter\tabu@Xparse\expandafter{\expandafter}%
+ \fi
+}% \tabu@Xd@sp
+\def\tabu@Xrewritten {%
+ \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi
+ \ifdim \tabucolX<\z@ \tabu@negcoeftrue
+ \else\ifdim \tabucolX=\z@ \tabucolX \p@
+ \fi\fi
+ \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}%
+ \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}%
+ \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{%
+ >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}%
+ \tabu@rewritten {\tabu@hsize \tabu@temp}%
+ <{##2\ifx$\tabu@Xmath$\fi}}%
+ }\tabu@rewritten
+}% \tabu@Xrewritten
+\def\tabu@hsize #1#2{%
+ \ifdim #2\p@<\z@
+ \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else
+ \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi
+ \fi
+ \else #2\tabucolX
+ \fi
+}% \tabu@hsize
+%% \usetabu and \preamble: rewriting process ---------------------
+\tabu@privatecolumntype \usetabu [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\let\tabu@rewriteX \tabu@rewriteXrestore
+ \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
+ \fi
+}% \NC@rewrite@\usetabu
+\tabu@privatecolumntype \preamble [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}%
+ \fi
+}% \NC@rewrite@\preamble
+%% Controlling the rewriting process -------------------------------
+\tabu@newcolumntype \tabu@rewritefirst{%
+ \iftabu@long \aftergroup \tabu@longpream %
+ \else \aftergroup \tabu@pream
+ \fi
+ \let\tabu@ \relax \let\tabu@hsize \relax
+ \let\tabu@Xcoefs \@empty \let\tabu@savels \relax
+ \tabu@Xcol \z@ \tabu@cnt \tw@
+ \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse
+ \global\setbox\@arstrutbox \box\@arstrutbox
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \NC@list\expandafter{\the\NC@list \NC@do X}%
+ \iftabu@siunitx %
+ \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}%
+ \expandafter\def\expandafter\tabu@NC@list\expandafter{%
+ \the\expandafter\NC@list \tabu@NC@list}% % * | X S
+ \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu
+ \expandafter \NC@do \expandafter\preamble
+ \the\NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle
+}% NC@rewrite@\tabu@rewritefirst
+\tabu@newcolumntype \tabu@rewritemiddle{%
+ \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast
+}% \NC@rewrite@\tabu@rewritemiddle
+\tabu@newcolumntype \tabu@rewritelast{%
+ \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne
+ \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \else \let\tabu@prev\tabu@temp
+ \fi
+ \ifcase \tabu@cnt \expandafter\tabu@endrewrite
+ \else \expandafter\NC@find \expandafter\tabu@rewritemiddle
+ \fi
+}% \NC@rewrite@\tabu@rewritelast
+%% Choosing the strategy --------------------------------------------
+\def\tabu@endrewrite {%
+ \let\tabu@temp \NC@find
+ \ifx \@arrayright\relax \let\@arrayright \@empty \fi
+ \count@=%
+ \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print
+ \iftabu@measuring
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@target \csname tabu@\the\tabu@nested.T\endcsname
+ \tabucolX \csname tabu@\the\tabu@nested.X\endcsname
+ \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}%
+ \fi
+ \else\iftabu@measuring 4 % X columns
+ \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer
+ \tabu@target \the\tabu@target
+ \tabu@spreadtarget \the\tabu@spreadtarget}%
+ \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}%
+ \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}%
+ \let\tabu@Xcoefs \relax
+ \else\ifcase\tabu@nested \thr@@ % outer, no X
+ \global\let\tabu@afterendpar \relax
+ \else \@ne % inner, no X, outer in mode 1 or 2
+ \fi
+ \ifdefined\tabu@usetabu
+ \else \ifdim\tabu@target=\z@
+ \else \let\tabu@temp \tabu@extracolsep
+ \fi\fi
+ \fi
+ \fi
+ \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}%
+ \tabu@temp
+}% \tabu@endrewrite
+\def\tabu@extracolsep{\@defaultunits \expandafter\let
+ \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil
+ \ifx \tabu@temp\@sptoken
+ \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep
+ \else
+ \edef\tabu@temp{\noexpand\NC@find
+ \if |\noexpand\tabu@temp @%
+ \else\if !\noexpand\tabu@temp @%
+ \else !%
+ \fi\fi
+ {\noexpand\extracolsep\noexpand\@flushglue}}%
+ \fi
+ \tabu@temp
+}% \tabu@extrac@lsep
+%% Implementing the strategy ----------------------------------------
+\long\def\tabu@pream #1\@preamble {%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\tabu@aftergroupcleanup}%
+ \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody
+ \@preamble}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@pream
+\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@longpream
+\def\tabu@select {%
+ \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi
+ \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi
+ \ifcase \count@
+ \global\let\tabu@elapsedtime \relax
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble % vertical adjustment (inherited from outer)
+ \or % exit in vertical measure + struts per cell because no X and outer in mode 3
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \or % exit without measure because no X and outer in mode 4
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \else % needs trials
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@savecounters
+ \expandafter \tabu@setstrategy
+ \fi
+}% \tabu@select
+\def\tabu@@ {\gdef\tabu@mkpreambuffer}
+%% Protections to set up before trials ------------------------------
+\def\tabu@setstrategy {\begingroup %
+ \tabu@trialh@@k \tabu@cnt \z@ % number of trials
+ \hbadness \@M \let\hbadness \@tempcnta
+ \hfuzz \maxdimen \let\hfuzz \@tempdima
+ \let\write \tabu@nowrite\let\GenericError \tabu@GenericError
+ \let\savetabu \@gobble \let\tabudefaulttarget \linewidth
+ \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote
+ \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor
+ \let\tabu@aftergroupcleanup \relax % only after the last trial
+ \tabu@mkpreambuffer
+ \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init
+ \def\tabu@lasttry{\m@ne\p@}\fi
+ \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi %
+ \tabu@collectbody \tabu@strategy %
+}% \tabu@setstrategy
+\def\tabu@savecounters{%
+ \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}%
+ \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax
+}% \tabu@savecounters
+\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0)
+ \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs
+ \ifdim \dimen@>\z@
+ \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \fi
+}% \tabucolX@init
+\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum
+ \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@
+ \else -#2\p@ \tabu@negcoeftrue
+ \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \tabu@wddef{#1}{0pt}%
+ \fi
+}% \tabu@Xinit
+%% Collecting the environment body ----------------------------------
+\long\def\tabu@collectbody #1#2\end #3{%
+ \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}%
+ \ifx \tabu@stack\@empty
+ \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}%
+ \def\tabu@end@envir{\end{#3}}%
+ \iftabuscantokens
+ \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}%
+ \else \def\tabu@endenvir {\let\endarray \@empty
+ \end{#3}\tabu@gobbleX}%
+ \fi
+ \else \def\tabu@endenvir {\end{#3}}\fi}%
+ \let\tabu@collectbody \tabu@endofcollect
+ \else\def\tabu@temp{#3}%
+ \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }%
+ \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \toks@\expandafter{\the\toks@ #2\end{#3}}%
+ \fi\fi\fi
+ \fi
+ \tabu@collectbody{#1}%
+}% \tabu@collectbody
+\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}%
+\def\tabu@endofcollect #1{\ifnum0=`{}\fi
+ \expandafter\endgroup \the\toks@ #1%
+}% \tabu@endofcollect
+%% The trials: switching between strategies -------------------------
+\def\tabu@strategy {\relax % stops \count@ assignment !
+ \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished)
+ \expandafter \tabu@endoftrials
+ \or % case 1 = exit in vertical measure (outer in mode 3)
+ \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}%
+ \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}%
+ \expandafter \tabu@endoftrials
+ \or % case 2 = exit with a rule replacing the table (outer in mode 4)
+ \expandafter \tabu@quickend
+ \or % case 3 = outer is in mode 3 because of no X
+ \begingroup
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \expandafter \tabu@measuring
+ \else % case 4 = horizontal measure
+ \begingroup
+ \global\let\tabu@elapsedtime \tabu@message@etime
+ \long\def\multicolumn##1##2##3{\multispan{##1}}%
+ \let\tabu@startpboxORI \@startpbox
+ \iftabu@spread
+ \def\tabu@naturalXmax {\z@}%
+ \let\tabu@naturalXmin \tabu@naturalXmax
+ \tabu@evr{\global\tabu@naturalX \z@}%
+ \let\@startpbox \tabu@startpboxmeasure
+ \else\iftabu@negcoef
+ \let\@startpbox \tabu@startpboxmeasure
+ \else \let\@startpbox \tabu@startpboxquick
+ \fi\fi
+ \expandafter \tabu@measuring
+ \fi
+}% \tabu@strategy
+\def\tabu@measuring{\expandafter \tabu@trial \expandafter
+ \count@ \the\count@ \tabu@endtrial
+}% \tabu@measuring
+\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi}
+\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \csname tabu@adl@endtrial\endcsname
+ \endarray}$\egroup % got \tabu@box
+}% \tabu@shorttrial
+\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \tabuendlongtrial}\egroup % got \tabu@box
+}% \tabu@longtrial
+\def\tabuendlongtrial{% no @ allowed for \scantokens
+ \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
+ \LT@get@widths
+}% \tabuendlongtrial
+\def\tabu@adl@endtrial{%
+ \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails !
+\def\tabu@seteverycr {\tabu@reset
+ \everycr \expandafter{\the\everycr \tabu@everycr}%
+ \let\everycr \tabu@noeverycr %
+}% \tabu@seteverycr
+\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@}
+\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr}
+\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi}
+\def\tabu@endoftrials {%
+ \iftabuscantokens \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\expandafter \tabu@closetrialsgroup \expandafter
+ \tabu@rescan \expandafter{%
+ \expandafter\tabuthepreamble
+ \the\expandafter\tabu@thebody
+ \iftabu@long \else \endarray \fi}}
+ {\expandafter\tabu@closetrialsgroup \expandafter
+ \tabuthepreamble
+ \the\tabu@thebody}%
+ \tabu@endenvir % Finish !
+}% \tabu@endoftrials
+\def\tabu@closetrialsgroup {%
+ \toks@\expandafter{\tabu@endenvir}%
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target
+ \tabu@cnt \the\tabu@cnt
+ \def\noexpand\tabu@endenvir{\the\toks@}%
+ %Quid de \@halignto = \tabu@halignto ??
+ }% \tabu@bufferX
+ \tabu@bufferX
+ \ifcase\tabu@nested % print out (outer in mode 0)
+ \global\tabu@cnt \tabu@cnt
+ \tabu@evr{\tabu@verticaldynamicadjustment}%
+ \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty
+ \let\@finalstrut \tabu@finalstrut
+ \else % vertical measure of nested tabu
+ \tabu@evr{\tabu@verticalinit}%
+ \tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \fi
+ \tabu@clckpt \let\@halignto \tabu@halignto
+ \let\@halignto \@empty
+ \tabu@seteverycr
+ \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@
+ \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts)
+ \fi\fi
+}% \tabu@closetrialsgroup
+\def\tabu@quickend {\expandafter \endgroup \expandafter
+ \tabu@target \the\tabu@target \tabu@quickrule
+ \let\endarray \relax \tabu@endenvir
+}% \tabu@quickend
+\def\tabu@endtrial {\relax % stops \count@ assignment !
+ \ifcase \count@ \tabu@err % case 0 = impossible here
+ \or \tabu@err % case 1 = impossible here
+ \or \tabu@err % case 2 = impossible here
+ \or % case 3 = outer goes into mode 0
+ \def\tabu@bufferX{\endgroup}\count@ \z@
+ \else % case 4 = outer goes into mode 3
+ \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3)
+ \else \tabu@arith % or 2 (outer in mode 4)
+ \fi
+ \count@=%
+ \ifcase\tabu@nested \thr@@ % outer goes into mode 3
+ \else\iftabu@measuring \tw@ % outer is in mode 4
+ \else \@ne % outer is in mode 3
+ \fi\fi
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+ \fi
+ \expandafter \tabu@bufferX \expandafter
+ \count@ \the\count@ \tabu@strategy
+}% \tabu@endtrial
+\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}}
+%% The algorithms: compute the widths / stop or go on ---------------
+\def\tabu@arithnegcoef {%
+ \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs
+}% \tabu@arithnegcoef
+\def\tabu@arith@negcoef #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition
+ \advance\@tempdima #2\tabucolX
+ \else
+ \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated
+ \advance\dimen@ -#2\p@
+ \advance\@tempdima -#2\tabucolX
+ \else
+ \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised
+ \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised
+ \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target)
+ \fi
+ \fi
+ \fi
+}% \tabu@arith@negcoef
+\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@
+ \ifdim \@tempdima=\z@
+ \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}%
+ \else
+ \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2}
+ *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}%
+ \fi
+}% \tabu@givespace
+\def\tabu@arith {\advance\tabu@cnt \@ne
+ \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi
+ \tabu@arithnegcoef
+ \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax %
+ \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax
+ \tabu@message{\tabu@message@arith}%
+ \ifdim \tabu@DELTA <\tabu@hfuzz
+ \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ?
+ \let\tabu@ \tabu@givespace \tabu@Xcoefs
+ \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message
+ \else % already converged: nothing to do but nearly impossible...
+ \fi
+ \tabucolX \maxdimen
+ \tabu@measuringfalse
+ \else % need for narrower X columns
+ \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax
+ \tabu@measuringtrue
+ \@whilesw \iftabu@measuring\fi {%
+ \advance\tabu@cnt \@ne
+ \tabu@arithnegcoef
+ \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here
+ \tabu@message{\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else
+ \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@
+ \fi}%
+ \ifdim -\tabu@DELTA<\tabu@hfuzz
+ \advance\@tempdima \@tempdimb % for message
+ \tabu@measuringfalse
+ \else
+ \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax
+ \fi
+ }%
+ \fi
+ \tabu@message{\tabu@message@reached}%
+ \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+}% \tabu@arith
+\def\tabu@spreadarith {%
+ \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs
+ \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}%
+ \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax
+ \iftabu@measuring
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}%
+ \else
+ \tabu@message{\tabu@message@spreadarith}%
+ \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target
+ \tabu@message{(tabu) spread
+ \ifdim \@tempdimc>\tabu@target useless here: default target used%
+ \else too large: reduced to fit default target\fi.}%
+ \else
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}%
+ \fi
+ \begingroup \let\tabu@wddef \@gobbletwo
+ \@tempdimb \@tempdima
+ \tabucolX@init
+ \tabu@arithnegcoef
+ \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax
+ \expandafter\endgroup \expandafter\tabucolX \the\tabucolX
+ \tabu@arith
+ \fi
+}% \tabu@spreadarith
+\def\tabu@spread@arith #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@
+ \else \advance\@tempdima \tabu@wd{#1}\relax
+ \fi
+}% \tabu@spread@arith
+%% Reporting in the .log file ---------------------------------------
+\def\tabu@message@defaulttarget{%
+ \ifnum\tabu@nested=\z@^^J(tabu) Default target:
+ \ifx\tabudefaulttarget\linewidth \string\linewidth
+ \ifdim \tabu@thetarget=\linewidth \else
+ -\the\dimexpr\linewidth-\tabu@thetarget\fi =
+ \else\ifx\tabudefaulttarget\linegoal\string\linegoal=
+ \fi\fi
+ \else (tabu) Default target (nested): \fi
+ \the\tabu@target \on@line
+ \ifnum\tabu@nested=\z@ , page \the\c@page\fi}
+\def\tabu@message@target {^^J(tabu) Target specified:
+ \the\tabu@target \on@line, page \the\c@page}
+\def\tabu@message@arith {\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else
+ \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@
+ \fi
+}% \tabu@message@arith
+\def\tabu@message@spreadarith {\tabu@spreadheader
+ \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@
+ \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@
+ \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@
+ \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target
+ \else \@tempdimc+\tabu@spreadtarget \fi
+ {}{}{}{}{}\@@}
+\def\tabu@message@negcoef #1#2{
+ \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]:
+ \space width = \tabu@wd {#1}
+ \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname
+ \ifdim -\tabu@pt#2\tabucolX<\tabu@target
+ < \number-\rem@pt#2 X
+ = \the\dimexpr -\tabu@pt#2\tabucolX \relax
+ \else
+ <= \the\tabu@target\space < \number-\rem@pt#2 X\fi}
+\def\tabu@message@reached{\tabu@header
+ ******* Reached Target:
+ hfuzz = \tabu@hfuzz\on@line\space *******}
+\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}%
+ \tabu@message{(tabu)\tabu@spaces Time elapsed during measure:
+ \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec
+ \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime)
+ -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax
+ *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space
+ cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}}
+\def\tabu@message@verticalsp {%
+ \ifdim \@tempdima>\tabu@ht
+ \ifdim \@tempdimb>\tabu@dp
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J%
+ \else
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J%
+ \fi
+ \else\ifdim \@tempdimb>\tabu@dp
+ \tabu@spaces\tabu@spaces\tabu@spaces
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi
+ \fi
+}% \tabu@message@verticalsp
+\edef\tabu@spaces{\@spaces}
+\def\tabu@strippt{\expandafter\tabu@pt\the}
+{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}}
+\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr}
+\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt}
+\def\do #1{%
+ \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{%
+ \ifnum##1<10 #1 #1\else
+ \ifnum##1<100 #1 \else
+ \ifnum##1<\@m #1\fi\fi\fi
+ ##1.##2##3##4##5##6##7##8#1}%
+ \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }%
+ \def\tabu@titles{\ifnum \tabu@nested=\z@
+ (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
+ #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
+ \def\tabu@spreadheader{%
+ (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min.
+ #1 New Target^^J%
+ (tabu) sprd}
+ \def\tabu@message@save {\begingroup
+ \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@}
+ \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt
+ \dimexpr####1\p@{ }{ }}}%
+ \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}%
+ \let\CT@arc@ \relax \let\@preamble \@gobble
+ \let\tabu@savedpream \@firstofone
+ \let\tabu@savedparams \@firstofone
+ \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}%
+ \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}%
+ \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}%
+ \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}%
+ \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}%
+ \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}%
+ \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}%
+ \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}%
+ \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}%
+ \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}%
+ \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }%
+ \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}%
+ \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}%
+ \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}%
+ \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}%
+ \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}%
+ \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}%
+ \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}%
+ \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo
+ \tabu@message{%
+ (tabu) \string\savetabu{\tabu@temp}: \on@line^^J%
+ \tabu@usetabu \@nil^^J}%
+ \endgroup}
+}\do{ }
+%% Measuring the natural width (varwidth) - store the results -------
+\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop
+ \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}%
+ \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ?
+ \iftabu@spread \else % if spread -> measure
+ \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure
+ \let\@startpbox \tabu@startpboxORI % restore immediately (nesting)
+ \tabu@measuringtrue % for the quick option...
+ \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi
+ \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
+ \tabu@target=\tabu@temp\tabucolX \fi\fi
+ \setbox\tabu@box \hbox \bgroup
+ \begin{varwidth}\tabu@target
+ \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width...
+ \narrowragged \arraybackslash \parfillskip \@flushglue
+ \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi
+ \bgroup \aftergroup\tabu@endpboxmeasure
+ \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi
+ \else \expandafter\@gobble
+ \tabu@startpboxquick{#1}% \@gobble \bgroup
+ \fi
+}% \tabu@startpboxmeasure
+\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty
+ \bgroup\color@begingroup}
+\def\tabu@endpboxmeasure {%
+ \@finalstrut \@arstrutbox
+ \end{varwidth}\egroup %
+ \ifdim \tabu@temp\p@ <\z@ % neg coef
+ \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box
+ \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}%
+ \tabu@debug{\tabu@message@endpboxmeasure}%
+ \fi
+ \else % spread coef>0
+ \global\advance \tabu@naturalX \wd\tabu@box
+ \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax
+ \ifdim \tabu@naturalXmax <\tabu@naturalX
+ \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi
+ \ifdim \tabu@naturalXmin <\@tempdima
+ \xdef\tabu@naturalXmin {\the\@tempdima}\fi
+ \fi
+ \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target
+}% \tabu@endpboxmeasure
+\def\tabu@wddef #1{\expandafter\xdef
+ \csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd
+ \the\tabu@Xcol. X[\tabu@temp]:
+ target = \the\tabucolX \space
+ \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol
+ =\tabu@wd\tabu@Xcol
+}% \tabu@message@endpboxmeasure
+\def\tabu@startpboxquick {\bgroup
+ \let\@startpbox \tabu@startpboxORI % restore immediately
+ \let\tabu \tabu@quick % \begin is expanded before...
+ \expandafter\@gobble \@startpbox % gobbles \bgroup
+}% \tabu@startpboxquick
+\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick
+}% \tabu@quick
+\def\tabu@endquick {%
+ \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else
+ \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax
+ \endgroup
+ \else \let\endtabu \relax
+ \tabu@end@envir
+ \fi
+}% \tabu@quick
+\def\tabu@endtabu {\end{tabu}}
+\def\tabu@endtabus {\end{tabu*}}
+%% Measuring the heights and depths - store the results -------------
+\def\tabu@verticalmeasure{\everypar{}%
+ \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group
+ \setbox\tabu@box =\hbox\bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@lcr
+ \d@llarbegin % after \hbox ...
+ \else
+ \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop
+ \else\ifnum\currentgrouptype=12\vcenter
+ \else\vbox\fi\fi}%
+ \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@pmb
+ \fi
+}% \tabu@verticalmeasure
+\def\tabu@verticalsp@lcr{%
+ \d@llarend \egroup %
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \noindent\vrule height\@tempdima depth\@tempdimb
+}% \tabu@verticalsp@lcr
+\def\tabu@verticalsp@pmb{% inserts struts as needed
+ \par \expandafter\egroup
+ \expandafter$\expandafter
+ \egroup \expandafter
+ \@tempdimc \the\prevdepth
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \let\@finalstrut \@gobble
+ \hrule height\@tempdima depth\@tempdimb width\hsize
+%% \box\tabu@box
+}% \tabu@verticalsp@pmb
+
+\def\tabu@verticalinit{%
+ \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset !
+ \advance\c@taburow \@ne
+ \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}%
+ \advance\c@taburow \m@ne
+}% \tabu@verticalinit
+\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@verticaldynamicadjustment {%
+ \advance\c@taburow \@ne
+ \extrarowheight \dimexpr\tabu@ht - \ht\strutbox
+ \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox
+ \let\arraystretch \@empty
+ \advance\c@taburow \m@ne
+}% \tabu@verticaldynamicadjustment
+\def\tabuphantomline{\crcr \noalign{%
+ {\globaldefs \@ne
+ \setbox\@arstrutbox \box\voidb@x
+ \let\tabu@@celllalign \tabu@celllalign
+ \let\tabu@@cellralign \tabu@cellralign
+ \let\tabu@@cellleft \tabu@cellleft
+ \let\tabu@@cellright \tabu@cellright
+ \let\tabu@@thevline \tabu@thevline
+ \let\tabu@celllalign \@empty
+ \let\tabu@cellralign \@empty
+ \let\tabu@cellright \@empty
+ \let\tabu@cellleft \@empty
+ \let\tabu@thevline \relax}%
+ \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}%
+ \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr
+ \noalign{\tabu@rearstrut
+ {\globaldefs\@ne
+ \let\tabu@celllalign \tabu@@celllalign
+ \let\tabu@cellralign \tabu@@cellralign
+ \let\tabu@cellleft \tabu@@cellleft
+ \let\tabu@cellright \tabu@@cellright
+ \let\tabu@thevline \tabu@@thevline}}}%
+ \expandafter}\the\toks@
+}% \tabuphantomline
+%% \firsthline and \lasthline corrections ---------------------------
+\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}}
+\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline}
+\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}}
+\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline}
+\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument)
+ \noalign{\ifnum0=`}\fi
+ {\CT@arc@\hrule height\arrayrulewidth}%
+ \futurelet \tabu@temp \tabu@xhline
+}% \tabu@hline
+\def\tabu@xhline{%
+ \ifx \tabu@temp \hline
+ {\ifx \CT@drsc@\relax \vskip
+ \else\ifx \CT@drsc@\@empty \vskip
+ \else \CT@drsc@\hrule height
+ \fi\fi
+ \doublerulesep}%
+ \fi
+ \ifnum0=`{\fi}%
+}% \tabu@xhline
+\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@
+ \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}%
+ \tabu@hlineAZsurround
+}% \tabu@hlineAZ
+\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{%
+ \extratabsurround #1\let\tabucline \tabucline@scan
+ \let\hline \tabu@hlinescan \let\firsthline \hline
+ \let\cline \tabu@clinescan \let\lasthline \hline
+ \expandafter \futurelet \expandafter \tabu@temp
+ \expandafter \tabu@nexthlineAZ \tabu@temp
+}% \tabu@hlineAZsurround
+\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline}
+\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}}
+\def\tabucline@scan{\@testopt \tabucline@sc@n {}}
+\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}}
+\def\tabu@nexthlineAZ{%
+ \ifx \tabu@temp\hline \else
+ \ifx \tabu@temp\cline \else
+ \ifx \tabu@temp\tabucline \else
+ \tabu@hlinecorrection
+ \fi\fi\fi
+}% \tabu@nexthlineAZ
+\def\tabu@xhlineAZ #1{%
+ \toks@\expandafter{\the\toks@ #1}%
+ \@tempdimc \tabu@thick % The last line width
+ \ifcase\count@ \@tempdimb \tabu@thick % The first line width
+ \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax
+ \fi
+ \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ
+}% \tabu@xhlineAZ
+\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1
+ \@tempdima \dimexpr \ht\@arstrutbox+\dimen@
+ \edef\firsthline{%
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ height \the\dimexpr\@tempdima+\extratabsurround
+ depth \dp\@arstrutbox
+ width \tabustrutrule}\hss}\cr
+ \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb
+ +\dp\@arstrutbox \relax}%
+ \the\toks@
+ }\ifnum0=`{\fi
+ \expandafter}\firsthline % we are then !
+}% \tabu@firsthlinecorrection
+\def\tabu@lasthlinecorrection{%
+ \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc
+ \edef\lasthline{%
+ \the\toks@
+ \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}%
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@
+ +\extratabsurround-\@tempdimc
+ height \z@
+ width \tabustrutrule}\hss}\cr
+ }\ifnum0=`{\fi
+ \expandafter}\lasthline % we are then !
+}% \tabu@lasthlinecorrection
+\def\tabu@LT@@hline{%
+ \ifx\LT@next\hline
+ \global\let\LT@next \@gobble
+ \ifx \CT@drsc@\relax
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}%
+ \else
+ \gdef\CT@LT@sep{%
+ \multispan\LT@cols{%
+ \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}%
+ \fi
+ \else
+ \global\let\LT@next\empty
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \CT@LT@sep
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \noalign{\penalty\@M}%
+ \LT@next
+}% \tabu@LT@@hline
+%% Horizontal lines : \tabucline ------------------------------------
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline}
+\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}%
+ \ifnum \tabu@stop<\z@ \toks@{}%
+ \else \tabu@clinearg{#1}\tabu@thestyle
+ \edef\tabucline{\toks@{%
+ \ifnum \tabu@start>\z@ \omit
+ \tabu@multispan\tabu@start {\span\omit}&\fi
+ \omit \tabu@multispan\tabu@stop {\span\omit}%
+ \tabu@thehline\cr
+ }}\tabucline
+ \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}%
+ \fi
+ \futurelet \tabu@temp \tabu@xcline
+}% \tabu@cline
+\def\tabu@clinearg #1{%
+ \ifx\\#1\\\let\tabu@thestyle \tabu@ls@
+ \else \@defaultunits \expandafter\let\expandafter\@tempa
+ \romannumeral-`\0#1\relax \@nnil
+ \ifx \hbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \box\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vtop\@tempa \tabu@clinebox{#1}%
+ \else\ifx \copy\@tempa \tabu@clinebox{#1}%
+ \else\ifx \leaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \cleaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \xleaders\@tempa \tabu@clineleads{#1}%
+ \else\tabu@getline {#1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \fi
+}% \tabu@clinearg
+\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}}
+\def\tabu@clineleads #1{%
+ \let\tabu@thestyle \relax \let\tabu@leaders \@undefined
+ \gdef\tabu@thehrule{#1}}
+\def\tabu@thehline{\begingroup
+ \ifdefined\tabu@leaders
+ \noexpand\tabu@thehleaders
+ \else \noexpand\tabu@thehrule
+ \fi \endgroup
+}% \tabu@thehline
+\def\tabu@xcline{%
+ \ifx \tabu@temp\tabucline
+ \toks@\expandafter{\the\toks@ \noalign
+ {\ifx\CT@drsc@\relax \vskip
+ \else \CT@drsc@\hrule height
+ \fi
+ \doublerulesep}}%
+ \fi
+ \tabu@docline
+}% \tabu@xcline
+\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@}
+\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}%
+ \ifnum0=`{\fi}\aftergroup\tabu@doclineafter}
+\def\tabu@multispan #1#2{%
+ \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan
+ \else \expandafter\@gobbletwo
+ \fi {#1-1}{#2}%
+}% \tabu@multispan
+\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil}
+\def\tabu@start@stop #1-#2\@nnil{%
+ \@defaultunits \tabu@start\number 0#1\relax \@nnil
+ \@defaultunits \tabu@stop \number 0#2\relax \@nnil
+ \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne
+ \else\ifnum \tabu@stop=\z@ \tabu@nbcols
+ \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols
+ \else \tabu@stop
+ \fi\fi\fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi
+}% \tabu@start@stop
+%% Numbers: siunitx S columns (and \tabudecimal) -------------------
+\def\tabu@tabudecimal #1{%
+ \def\tabu@decimal{#1}\@temptokena{}%
+ \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces
+ \tabu@scandecimal
+}% \tabu@tabudecimal
+\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@}
+\def\tabu@skipdecimal#1{#1\tabu@scandecimal}
+\def\tabu@getdecimal@ignorespaces{%
+ \ifcase 0\ifx\tabu@temp\ignorespaces\else
+ \ifx\tabu@temp\@sptoken1\else
+ 2\fi\fi\relax
+ \let\tabu@getdecimal@ \tabu@getdecimal
+ \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal
+ \else \expandafter\tabu@skipdecimal
+ \fi
+}% \tabu@getdecimal@ignorespaces
+\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}%
+ \tabu@scandecimal}
+\def\do#1{%
+ \def\tabu@get@decimalspace#1{%
+ \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}%
+}\do{ }
+\let\tabu@@tabudecimal \tabu@tabudecimal
+\def\tabu@getdecimal{%
+ \ifcase 0\ifx 0\tabu@temp\else
+ \ifx 1\tabu@temp\else
+ \ifx 2\tabu@temp\else
+ \ifx 3\tabu@temp\else
+ \ifx 4\tabu@temp\else
+ \ifx 5\tabu@temp\else
+ \ifx 6\tabu@temp\else
+ \ifx 7\tabu@temp\else
+ \ifx 8\tabu@temp\else
+ \ifx 9\tabu@temp\else
+ \ifx .\tabu@temp\else
+ \ifx ,\tabu@temp\else
+ \ifx -\tabu@temp\else
+ \ifx +\tabu@temp\else
+ \ifx e\tabu@temp\else
+ \ifx E\tabu@temp\else
+ \ifx\tabu@cellleft\tabu@temp1\else
+ \ifx\ignorespaces\tabu@temp1\else
+ \ifx\@sptoken\tabu@temp2\else
+ 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \expandafter\tabu@get@decimal
+ \or \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@get@decimalspace
+ \else\expandafter\tabu@printdecimal
+ \fi
+}% \tabu@getdecimal
+\def\tabu@printdecimal{%
+ \edef\tabu@temp{\the\@temptokena}%
+ \ifx\tabu@temp\@empty\else
+ \ifx\tabu@temp\space\else
+ \expandafter\tabu@decimal\expandafter{\the\@temptokena}%
+ \fi\fi
+}% \tabu@printdecimal
+%% Verbatim inside X columns ----------------------------------------
+\def\tabu@verbatim{%
+ \let\verb \tabu@verb
+ \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd
+}% \tabu@verbatim
+\let\tabu@ltx@verb \verb
+\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb}
+\def\tabu@fancyvrb {%
+ \def\tabu@FV@DefineCheckEnd ##1{%
+ \def\tabu@FV@DefineCheckEnd{%
+ ##1%
+ \let\FV@CheckEnd \tabu@FV@CheckEnd
+ \let\FV@@CheckEnd \tabu@FV@@CheckEnd
+ \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd
+ \edef\FV@EndScanning{%
+ \def\noexpand\next{\noexpand\end{\FV@EnvironName}}%
+ \global\let\noexpand\FV@EnvironName\relax
+ \noexpand\next}%
+ \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}%
+ }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd}
+}% \tabu@fancyvrb
+\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil}
+\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}}
+\begingroup
+\catcode`\[1 \catcode`\]2
+\@makeother\{ \@makeother\}
+ \edef\x[\endgroup
+ \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3%
+ ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}}
+\def\tabu@FV@ListProcessLine #1{%
+ \hbox {%to \hsize{%
+ \kern\leftmargin
+ \hbox {%to \linewidth{%
+ \FV@LeftListNumber
+ \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}\hss
+%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
+%% \FV@RightListFrame}%
+ \FV@RightListFrame
+ \FV@RightListNumber}%
+%% DG/SR modification end
+ \hss}}
+%% \savetabu --------------------------------------------------------
+\newcommand*\savetabu[1]{\noalign{%
+ \tabu@sanitizearg{#1}\tabu@temp
+ \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else
+ \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}%
+ \ifdefined\tabu@restored \expandafter\let
+ \csname tabu@saved@\tabu@temp \endcsname \tabu@restored
+ \else {\tabu@save}%
+ \fi
+ \fi}%
+}% \savetabu
+\def\tabu@save {%
+ \toks0\expandafter{\tabu@saved@}%
+ \iftabu@negcoef
+ \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}%
+ \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi
+ \toks1\expandafter{\tabu@savedpream}%
+ \toks2\expandafter{\tabu@savedpreamble}%
+ \let\@preamble \relax
+ \let\tabu@savedpream \relax \let\tabu@savedparams \relax
+ \edef\tabu@preamble{%
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \edef\tabu@usetabu{%
+ \def\@preamble {\noexpand\the\toks2}%
+ \tabu@target \the\tabu@target \relax
+ \tabucolX \the\tabucolX \relax
+ \tabu@nbcols \the\tabu@nbcols \relax
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \let\tabu@aligndefault \relax \let\@sharp \relax
+ \edef\@tempa{\noexpand\tabu@s@ved
+ {\tabu@usetabu}
+ {\tabu@preamble}
+ {\the\toks1}}\@tempa
+ \tabu@message@save
+}% \tabu@save
+\long\def\tabu@s@ved #1#2#3{%
+ \def\tabu@usetabu{#1}%
+ \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{%
+ \ifodd ##1% \usetabu
+ \tabu@measuringfalse \tabu@spreadfalse % Just in case...
+ \gdef\tabu@usetabu {%
+ \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi
+ \global\let\tabu@usetabu \@undefined
+ \def\@halignto {to\tabu@target}%
+ #1%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \else % \preamble
+ \gdef\tabu@preamble {%
+ \global\let\tabu@preamble \@undefined
+ #2%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \fi
+ #3}%
+}% \tabu@s@ved
+\def\tabu@aligndefault@text {\tabu@aligndefault}%
+\def\tabu@warn@usetabu {\PackageWarning{tabu}
+ {Specifying a target with \string\usetabu\space is useless
+ \MessageBreak The target cannot be changed!}}
+\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi}
+\def\tabu@savewarn#1#2{\PackageInfo{tabu}
+ {User-name `#1' already used for \string\savetabu
+ \MessageBreak #2}}%
+\def\tabu@saveerr#1{\PackageError{tabu}
+ {User-name `#1' is unknown for \string\usetabu
+ \MessageBreak I cannot restore an unknown preamble!}\@ehd}
+%% \rowfont ---------------------------------------------------------
+\newskip \tabu@cellskip
+\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi
+ {\ifnum0=`}\fi \tabu@row@font}
+\newcommand*\tabu@row@font[2][]{%
+ \ifnum7=\currentgrouptype
+ \global\let\tabu@@cellleft \tabu@cellleft
+ \global\let\tabu@@cellright \tabu@cellright
+ \global\let\tabu@@celllalign \tabu@celllalign
+ \global\let\tabu@@cellralign \tabu@cellralign
+ \global\let\tabu@@rowfontreset\tabu@rowfontreset
+ \fi
+ \global\let\tabu@rowfontreset \tabu@rowfont@reset
+ \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}%
+ \ifcsname tabu@cell@#1\endcsname % row alignment
+ \csname tabu@cell@#1\endcsname \fi
+ \ifnum0=`{\fi}% end of group / noalign group
+}% \rowfont
+\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}%
+\def\tabu@rowfont@reset{%
+ \global\let\tabu@rowfontreset \tabu@@rowfontreset
+ \global\let\tabu@cellleft \tabu@@cellleft
+ \global\let\tabu@cellright \tabu@@cellright
+ \global\let\tabu@cellfont \@empty
+ \global\let\tabu@celllalign \tabu@@celllalign
+ \global\let\tabu@cellralign \tabu@@cellralign
+}% \tabu@@rowfontreset
+\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl
+%% \tabu@prepnext@tok -----------------------------------------------
+\newif \iftabu@cellright
+\def\tabu@prepnext@tok{%
+ \ifnum \count@<\z@ %
+ \@tempcnta \@M %
+ \tabu@nbcols\z@
+ \let\tabu@fornoopORI \@fornoop
+ \tabu@cellrightfalse
+ \else
+ \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
+ \advance \tabu@nbcols \@ne
+ \iftabu@cellright % before-previous token is right and is finished
+ \tabu@cellrightfalse %
+ \tabu@righttok
+ \fi
+ \tabu@lefttok
+ \or % (case 1) previous token is right
+ \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop
+ \else % special column: do not change the token
+ \iftabu@cellright % before-previous token is right
+ \tabu@cellrightfalse
+ \tabu@righttok
+ \fi
+ \fi % \ifcase
+ \fi
+ \tabu@prepnext@tokORI
+}% \tabu@prepnext@tok
+\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@}
+\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{%
+ \ifx \in@#2\else
+ \let\@fornoop \tabu@fornoopORI
+ \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}%
+ \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}%
+ \expandafter\prepnext@tok
+ \fi
+}% \tabu@lastnoop
+\def\tabu@righttok{%
+ \advance \count@ \m@ne
+ \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
+ \advance \count@ \@ne
+}% \tabu@righttok
+\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign
+ \the\toks\count@ \tabu@cellleft}% after because of $
+}% \tabu@lefttok
+%% Neutralisation of glues ------------------------------------------
+\let\tabu@cellleft \@empty
+\let\tabu@cellright \@empty
+\tabu@celllalign@def{\tabu@cellleft}%
+\let\tabu@cellralign \@empty
+\def\tabu@cell@align #1#2#3{%
+ \let\tabu@maybesiunitx \toks@ \tabu@celllalign
+ \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}%
+ \toks@\expandafter{\tabu@cellralign #2}%
+ \xdef\tabu@cellralign{\the\toks@}%
+ \toks@\expandafter{\tabu@cellleft #3}%
+ \xdef\tabu@cellleft{\the\toks@}%
+}% \tabu@cell@align
+\def\tabu@cell@l{% force alignment to left
+ \tabu@cell@align
+ {\tabu@removehfil \raggedright \tabu@cellleft}% left
+ {\tabu@flush1\tabu@ignorehfil}% right
+ \raggedright
+}% \tabu@cell@l
+\def\tabu@cell@c{% force alignment to center
+ \tabu@cell@align
+ {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \centering
+}% \tabu@cell@c
+\def\tabu@cell@r{% force alignment to right
+ \tabu@cell@align
+ {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft}
+ \tabu@ignorehfil
+ \raggedleft
+}% \tabu@cell@r
+\def\tabu@cell@j{% force justification (for p, m, b columns)
+ \tabu@cell@align
+ {\tabu@justify\tabu@cellleft}
+ {}
+ \tabu@justify
+}% \tabu@cell@j
+\def\tabu@justify{%
+ \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip
+ \parfillskip\@flushglue
+}% \tabu@justify
+%% ragged2e settings
+\def\tabu@cell@L{% force alignment to left (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedRight \tabu@cellleft}
+ {\tabu@flush 1\tabu@ignorehfil}
+ \RaggedRight
+}% \tabu@cell@L
+\def\tabu@cell@C{% force alignment to center (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \Centering
+}% \tabu@cell@C
+\def\tabu@cell@R{% force alignment to right (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft}
+ \tabu@ignorehfil
+ \RaggedLeft
+}% \tabu@cell@R
+\def\tabu@cell@J{% force justification (ragged2e)
+ \tabu@cell@align
+ {\justifying \tabu@cellleft}
+ {}
+ \justifying
+}% \tabu@cell@J
+\def\tabu@flush#1{%
+ \iftabu@colortbl % colortbl uses \hfill rather than \hfil
+ \hskip \ifnum13<\currentgrouptype \stretch{#1}%
+ \else \ifdim#1pt<\p@ \tabu@cellskip
+ \else \stretch{#1}
+ \fi\fi \relax
+ \else % array.sty
+ \ifnum 13<\currentgrouptype
+ \hfil \hskip1sp \relax \fi
+ \fi
+}% \tabu@flush
+\let\tabu@hfil \hfil
+\let\tabu@hfill \hfill
+\let\tabu@hskip \hskip
+\def\tabu@removehfil{%
+ \iftabu@colortbl
+ \unkern \tabu@cellskip =\lastskip
+ \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip
+ \else \tabu@cellskip \z@skip
+ \fi
+ \else
+ \ifdim\lastskip=1sp\unskip\fi
+ \ifnum\gluestretchorder\lastskip =\@ne
+ \hfilneg % \hfilneg for array.sty but not for colortbl...
+ \fi
+ \fi
+}% \tabu@removehfil
+\def\tabu@ignorehfil{\aftergroup \tabu@nohfil}
+\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
+ \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group
+}% \tabu@nohfil
+\def\tabu@colortblalignments {% if colortbl
+ \def\tabu@nohfil{%
+ \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group
+ \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff...
+ \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local
+}% \tabu@colortblalignments
+%% Taking care of footnotes and hyperfootnotes ----------------------
+\long\def\tabu@footnotetext #1{%
+ \edef\@tempa{\the\tabu@footnotes
+ \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}%
+ \global\tabu@footnotes\expandafter{\@tempa {#1}}}%
+\long\def\tabu@xfootnotetext [#1]#2{%
+ \global\tabu@footnotes\expandafter{\the\tabu@footnotes
+ \footnotetext [{#1}]{#2}}}
+\let\tabu@xfootnote \@xfootnote
+\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }}
+\long\def\tabu@Hy@xfootnote [#1]{%
+ \begingroup
+ \value\@mpfn #1\relax
+ \protected@xdef \@thefnmark {\thempfn}%
+ \endgroup
+ \@footnotemark \tabu@Hy@ftntxt {#1}%
+}% \tabu@Hy@xfootnote
+\long\def\tabu@Hy@ftntxt #1#2{%
+ \edef\@tempa{%
+ \the\tabu@footnotes
+ \begingroup
+ \value\@mpfn #1\relax
+ \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}%
+ \expandafter \noexpand \expandafter
+ \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}%
+ }%
+ \global\tabu@footnotes\expandafter{\@tempa {#2}%
+ \endgroup}%
+}% \tabu@Hy@ftntxt
+\long\def\tabu@Hy@footnotetext #1#2{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \hyper@@anchor {#1}{#2}%
+ \else
+ \Hy@raisedlink{%
+ \hyper@@anchor {#1}{\relax}%
+ }%
+ \def\@currentHref {#1}%
+ \let\@currentlabelname \@empty
+ #2%
+ \fi
+ }%
+}% \tabu@Hy@footnotetext
+%% No need for \arraybackslash ! ------------------------------------
+\def\tabu@latextwoe {%
+\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@centering \centering \arraybackslash
+\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash
+\tabu@temp \tabu@raggedright \raggedright \arraybackslash
+}% \tabu@latextwoe
+\def\tabu@raggedtwoe {%
+\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@Centering \Centering \arraybackslash
+\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash
+\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash
+\tabu@temp \tabu@justifying \justifying \arraybackslash
+}% \tabu@raggedtwoe
+\def\tabu@normalcrbackslash{\let\\\@normalcr}
+\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
+ \expandafter\tabu@normalcrbackslash \@trivlist}}
+%% Utilities: \fbox \fcolorbox and \tabudecimal -------------------
+\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox}
+\def\tabu@beginfbox {\bgroup \kern\fboxsep
+ \bgroup\aftergroup\tabu@endfbox}
+\def\tabu@endfbox {\kern\fboxsep\egroup\egroup
+ \@frameb@x\relax}
+\def\tabu@color@b@x #1#2{\leavevmode \bgroup
+ \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
+ \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox
+}% \tabu@color@b@x
+\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup
+ \aftergroup\tabu@endcolor@b@x \set@color}
+\def\tabu@endcolor@b@x {\kern\fboxsep \egroup
+ \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@
+ \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@
+ \tabu@docolor@b@x \egroup
+}% \tabu@endcolor@b@x
+%% Corrections (arydshln, delarray, colortbl) -----------------------
+\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray
+ \iftabu@colortbl
+ \ifdefined\adl@array %
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %
+ \@arrayright %
+ \gdef\@preamble{}}%
+ \else %
+ \def\tabu@endarray{%
+ \crcr \egroup \egroup %
+ \@arrayright %
+ \gdef\@preamble{}\CT@end}%
+ \fi
+ \else
+ \ifdefined\adl@array %
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \egroup %
+ \@arrayright %
+ \gdef\@preamble{}}%
+ \else %
+ \PackageWarning{tabu}
+ {\string\@arrayright\space is missing from the
+ \MessageBreak definition of \string\endarray.
+ \MessageBreak Compatibility with delarray.sty is broken.}%
+ \fi\fi
+}% \tabu@fix@arrayright
+\def\tabu@adl@xarraydashrule #1#2#3{%
+ \ifnum\@lastchclass=\adl@class@start\else
+ \ifnum\@lastchclass=\@ne\else
+ \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1)
+ \adl@leftrulefalse \fi\fi % must be treated the same
+ \fi
+ \ifadl@zwvrule\else \ifadl@inactive\else
+ \@addtopreamble{\vrule\@width\arrayrulewidth
+ \@height\z@ \@depth\z@}\fi \fi
+ \ifadl@leftrule
+ \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#1}#3}%
+ \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#2}#3}
+ \fi
+}% \tabu@adl@xarraydashrule
+\def\tabu@adl@act@endpbox {%
+ \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox
+ \egroup \egroup
+ \adl@colhtdp \box\adl@box \hfil
+}% \tabu@adl@act@endpbox
+\def\tabu@adl@fix {%
+ \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln
+ \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln
+ \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln
+ \let\@preamerror \@preamerr % arydshln
+}% \tabu@adl@fix
+%% Correction for longtable' \@startbox definition ------------------
+%% => \everypar is ``missing'' : TeX should be in vertical mode
+\def\tabu@LT@startpbox #1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \everypar{}}%
+}% \tabu@LT@startpbox
+%% \tracingtabu and the package options ------------------
+\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}}
+\DeclareOption{linegoal}{%
+ \AtEndOfPackage{%
+ \RequirePackage{linegoal}[2010/12/07]%
+ \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
+}}
+\DeclareOption{scantokens}{\tabuscantokenstrue}
+\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}}
+\def\tracingtabu {\begingroup\@ifnextchar=%
+ {\afterassignment\tabu@tracing\count@}
+ {\afterassignment\tabu@tracing\count@1\relax}}
+\def\tabu@tracing{\expandafter\endgroup
+ \expandafter\tabu@tr@cing \the\count@ \relax
+}% \tabu@tracing
+\def\tabu@tr@cing #1\relax {%
+ \ifnum#1>\thr@@ \let\tabu@tracinglines\message
+ \else \let\tabu@tracinglines\@gobble
+ \fi
+ \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG
+ \def\tabu@mkarstrut {\tabu@DBG@arstrut}%
+ \tabustrutrule 1.5\p@
+ \else \let\tabu@DBG \@gobble
+ \def\tabu@mkarstrut {\tabu@arstrut}%
+ \tabustrutrule \z@
+ \fi
+ \ifnum#1>\@ne \let\tabu@debug \message
+ \else \let\tabu@debug \@gobble
+ \fi
+ \ifnum#1>\z@
+ \let\tabu@message \message
+ \let\tabu@tracing@save \tabu@message@save
+ \let\tabu@starttimer \tabu@pdftimer
+ \else
+ \let\tabu@message \@gobble
+ \let\tabu@tracing@save \@gobble
+ \let\tabu@starttimer \relax
+ \fi
+}% \tabu@tr@cing
+%% Setup \AtBeginDocument
+\AtBeginDocument{\tabu@AtBeginDocument}
+\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined
+ \ifdefined\arrayrulecolor \tabu@colortbltrue %
+ \tabu@colortblalignments % different glues are used
+ \else \tabu@colortblfalse \fi
+ \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi
+ \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
+ \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
+ \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname %
+ \expandafter\ifx
+ \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax
+ \tabu@siunitxtrue
+ \else \let\tabu@maybesiunitx \@firstofone %
+ \let\tabu@siunitx \tabu@nosiunitx
+ \tabu@siunitxfalse
+ \fi
+ \ifdefined\adl@array %
+ \else \let\tabu@adl@fix \relax
+ \let\tabu@adl@endtrial \@empty \fi
+ \ifdefined\longtable %
+ \else \let\longtabu \tabu@nolongtabu \fi
+ \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi
+ \csname\ifcsname ifHy@hyperfootnotes\endcsname %
+ ifHy@hyperfootnotes\else iffalse\fi\endcsname
+ \let\tabu@footnotetext \tabu@Hy@ftntext
+ \let\tabu@xfootnote \tabu@Hy@xfootnote \fi
+ \ifdefined\FV@DefineCheckEnd%
+ \tabu@fancyvrb \fi
+ \ifdefined\color %
+ \let\tabu@color \color
+ \def\tabu@leavevmodecolor ##1{%
+ \def\tabu@leavevmodecolor {\leavevmode ##1}%
+ }\expandafter\tabu@leavevmodecolor\expandafter{\color}%
+ \else
+ \let\tabu@color \tabu@nocolor
+ \let\tabu@leavevmodecolor \@firstofone \fi
+ \tabu@latextwoe
+ \ifdefined\@raggedtwoe@everyselectfont %
+ \tabu@raggedtwoe
+ \else
+ \let\tabu@cell@L \tabu@cell@l
+ \let\tabu@cell@R \tabu@cell@r
+ \let\tabu@cell@C \tabu@cell@c
+ \let\tabu@cell@J \tabu@cell@j \fi
+ \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}%
+ \ifin@ \let\tabu@endarray \endarray
+ \else \tabu@fix@arrayright \fi%
+ \everyrow{}%
+}% \tabu@AtBeginDocument
+\def\tabu@warn@cellspace{%
+ \PackageWarning{tabu}{%
+ Package cellspace has some limitations
+ \MessageBreak And redefines some macros of array.sty.
+ \MessageBreak Please use \string\tabulinesep\space to control
+ \MessageBreak vertical spacing of lines inside tabu environment}%
+}% \tabu@warn@cellspace
+%% tabu Package initialisation
+\tabuscantokensfalse
+\let\tabu@arc@G \relax
+\let\tabu@drsc@G \relax
+\let\tabu@evr@G \@empty
+\let\tabu@rc@G \@empty
+\def\tabu@ls@G {\tabu@linestyle@}%
+\let\tabu@@rowfontreset \@empty %
+\let\tabu@@celllalign \@empty
+\let\tabu@@cellralign \@empty
+\let\tabu@@cellleft \@empty
+\let\tabu@@cellright \@empty
+\def\tabu@naturalXmin {\z@}
+\def\tabu@naturalXmax {\z@}
+\let\tabu@rowfontreset \@empty
+\def\tabulineon {4pt}\let\tabulineoff \tabulineon
+\tabu@everyrowtrue
+\ifdefined\pdfelapsedtime %
+ \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}%
+\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax
+\fi
+\tracingtabu=\z@
+\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@
+\tabulinestyle{}
+\taburowcolors{}
+\let\tabudefaulttarget \linewidth
+\ProcessOptions* % \ProcessOptions* is quicker !
+\endinput
+%%
+%% End of file `tabu.sty'.
diff --git a/docs/latex/time_8h.tex b/docs/latex/time_8h.tex
new file mode 100644
index 00000000..4500c2f1
--- /dev/null
+++ b/docs/latex/time_8h.tex
@@ -0,0 +1,80 @@
+\hypertarget{time_8h}{}\doxysubsection{time.\+h File Reference}
+\label{time_8h}\index{time.h@{time.h}}
+{\ttfamily \#include $<$types.\+h$>$}\newline
+{\ttfamily \#include $<$stdint.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{time_8h_a3d9fc3c745d0880902fe3ea3d5d5f71e}{C\+L\+O\+C\+K\+S\+\_\+\+P\+E\+R\+\_\+\+S\+EC}}~60
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}}
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}} \mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock}} () \mbox{\hyperlink{asm_2types_8h_a0971918860055db2e50dacea4da8f3bc}{O\+L\+D\+C\+A\+LL}}
+\item
+\mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}} \mbox{\hyperlink{time_8h_ae7841e681c8c9d59818568d39553642c}{time}} (\mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}} $\ast$t)
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Sort of A\+N\+SI compliant time functions.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{time_8h_a3d9fc3c745d0880902fe3ea3d5d5f71e}\label{time_8h_a3d9fc3c745d0880902fe3ea3d5d5f71e}}
+\index{time.h@{time.h}!CLOCKS\_PER\_SEC@{CLOCKS\_PER\_SEC}}
+\index{CLOCKS\_PER\_SEC@{CLOCKS\_PER\_SEC}!time.h@{time.h}}
+\doxyparagraph{\texorpdfstring{CLOCKS\_PER\_SEC}{CLOCKS\_PER\_SEC}}
+{\footnotesize\ttfamily \#define C\+L\+O\+C\+K\+S\+\_\+\+P\+E\+R\+\_\+\+S\+EC~60}
+
+
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{time_8h_ac84921d4d15eedac7d7b8051a7944c84}\label{time_8h_ac84921d4d15eedac7d7b8051a7944c84}}
+\index{time.h@{time.h}!time\_t@{time\_t}}
+\index{time\_t@{time\_t}!time.h@{time.h}}
+\doxyparagraph{\texorpdfstring{time\_t}{time\_t}}
+{\footnotesize\ttfamily typedef \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}}}
+
+
+
+\doxysubsubsection{Function Documentation}
+\mbox{\Hypertarget{time_8h_acc1f88818af5706d57262377382ae4ac}\label{time_8h_acc1f88818af5706d57262377382ae4ac}}
+\index{time.h@{time.h}!clock@{clock}}
+\index{clock@{clock}!time.h@{time.h}}
+\doxyparagraph{\texorpdfstring{clock()}{clock()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2gbz80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}} clock (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Returns an approximation of processor time used by the program in Clocks
+
+The value returned is the C\+PU time (ticks) used so far as a \mbox{\hyperlink{asm_2z80_2types_8h_aeb756bd89bf86769edbefdef8135109f}{clock\+\_\+t}}.
+
+To get the number of seconds used, divide by \mbox{\hyperlink{time_8h_a3d9fc3c745d0880902fe3ea3d5d5f71e}{C\+L\+O\+C\+K\+S\+\_\+\+P\+E\+R\+\_\+\+S\+EC}}.
+
+This is based on \mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}}, which will wrap around every $\sim$18 minutes. (unsigned 16 bits = 65535 / 60 / 60 = 18.\+2)
+
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}}, \mbox{\hyperlink{time_8h_ae7841e681c8c9d59818568d39553642c}{time()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{time_8h_ae7841e681c8c9d59818568d39553642c}\label{time_8h_ae7841e681c8c9d59818568d39553642c}}
+\index{time.h@{time.h}!time@{time}}
+\index{time@{time}!time.h@{time.h}}
+\doxyparagraph{\texorpdfstring{time()}{time()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}} time (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{time_8h_ac84921d4d15eedac7d7b8051a7944c84}{time\+\_\+t}} $\ast$}]{t }\end{DoxyParamCaption})}
+
+Converts \mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock()}} time to Seconds
+
+
+\begin{DoxyParams}{Parameters}
+{\em t} & If pointer {\bfseries{t}} is not N\+U\+LL, it\textquotesingle{}s value will be set to the same seconds calculation as returned by the function.\\
+\hline
+\end{DoxyParams}
+The calculation is \mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock()}} / C\+L\+O\+C\+K\+S\+\_\+\+P\+E\+R\+\_\+\+S\+EC
+
+Returns\+: time in seconds \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{sms_8h_a78d2fd18666afec116f176d46debb4e7}{sys\+\_\+time}}, \mbox{\hyperlink{time_8h_acc1f88818af5706d57262377382ae4ac}{clock()}}
+\end{DoxySeeAlso}
diff --git a/docs/latex/todo.tex b/docs/latex/todo.tex
new file mode 100644
index 00000000..6bde1344
--- /dev/null
+++ b/docs/latex/todo.tex
@@ -0,0 +1,27 @@
+
+\begin{DoxyRefList}
+\item[File \mbox{\hyperlink{far__ptr_8h}{far\+\_\+ptr.h}} ]\label{todo__todo000001}%
+\Hypertarget{todo__todo000001}%
+Add link to a discussion about banking (such as, how to assign code and variables to banks)
+\item[Page \mbox{\hyperlink{docs_using_gbdk}{Using G\+B\+DK}} ]\label{todo__todo000002}%
+\Hypertarget{todo__todo000002}%
+This is from G\+B\+DK 2.\+x docs, verify it with G\+B\+D\+K-\/2020 and modern S\+D\+CC
+\item[Page \mbox{\hyperlink{docs_coding_guidelines}{Coding Guidelines}} ]\label{todo__todo000003}%
+\Hypertarget{todo__todo000003}%
+Update and verify this section for the modernized S\+D\+CC and toolchain
+\item[Page \mbox{\hyperlink{docs_rombanking_mbcs}{R\+O\+M/\+R\+AM Banking and M\+B\+Cs}} ]\label{todo__todo000004}%
+\Hypertarget{todo__todo000004}%
+Fill in this info for Banked Functions Banked functions (located in a switchable R\+OM bank)
+\begin{DoxyItemize}
+\item May call functions in any bank\+: ?
+\item May use data in any bank\+: {\bfseries{NO}} (may only use data from currently active banks)
+\end{DoxyItemize}
+
+\label{todo__todo000005}%
+\Hypertarget{todo__todo000005}%
+Const Data (Variables in R\+OM)
+
+\label{todo__todo000006}%
+\Hypertarget{todo__todo000006}%
+Variables in R\+AM
+\end{DoxyRefList}
\ No newline at end of file
diff --git a/docs/latex/typeof_8h.tex b/docs/latex/typeof_8h.tex
new file mode 100644
index 00000000..a65aec48
--- /dev/null
+++ b/docs/latex/typeof_8h.tex
@@ -0,0 +1,176 @@
+\hypertarget{typeof_8h}{}\doxysubsection{typeof.\+h File Reference}
+\label{typeof_8h}\index{typeof.h@{typeof.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{typeof_8h_a4bb94b94304a21b7bd462be44f9d197a}{T\+Y\+P\+E\+O\+F\+\_\+\+I\+NT}}~1
+\item
+\#define \mbox{\hyperlink{typeof_8h_a58af351d7955729a79e425a88bf86bab}{T\+Y\+P\+E\+O\+F\+\_\+\+S\+H\+O\+RT}}~2
+\item
+\#define \mbox{\hyperlink{typeof_8h_ae042a4e85033237ee9fbc1af3cac7025}{T\+Y\+P\+E\+O\+F\+\_\+\+C\+H\+AR}}~3
+\item
+\#define \mbox{\hyperlink{typeof_8h_ab4833544b1f4060806106baa0eb916e6}{T\+Y\+P\+E\+O\+F\+\_\+\+L\+O\+NG}}~4
+\item
+\#define \mbox{\hyperlink{typeof_8h_a3d694a422fb7a54f15ddf1c9749567f7}{T\+Y\+P\+E\+O\+F\+\_\+\+F\+L\+O\+AT}}~5
+\item
+\#define \mbox{\hyperlink{typeof_8h_a709c014873866243abc0275099f676f5}{T\+Y\+P\+E\+O\+F\+\_\+\+F\+I\+X\+E\+D16\+X16}}~6
+\item
+\#define \mbox{\hyperlink{typeof_8h_a5b91f9d826e3c5c6873bc86cdce3d517}{T\+Y\+P\+E\+O\+F\+\_\+\+B\+IT}}~7
+\item
+\#define \mbox{\hyperlink{typeof_8h_a5b9f605bb8dcac27ddfab4e9a8c9a2ca}{T\+Y\+P\+E\+O\+F\+\_\+\+B\+I\+T\+F\+I\+E\+LD}}~8
+\item
+\#define \mbox{\hyperlink{typeof_8h_a09fcac98c1e69b32ea223eada74e30bd}{T\+Y\+P\+E\+O\+F\+\_\+\+S\+B\+IT}}~9
+\item
+\#define \mbox{\hyperlink{typeof_8h_aae32132bbca6df6423182122d95b00cd}{T\+Y\+P\+E\+O\+F\+\_\+\+S\+FR}}~10
+\item
+\#define \mbox{\hyperlink{typeof_8h_a03582306431a63d84cc721132ed683c8}{T\+Y\+P\+E\+O\+F\+\_\+\+V\+O\+ID}}~11
+\item
+\#define \mbox{\hyperlink{typeof_8h_a4f9ce6ed9178ad58f706e74cd8c24e1f}{T\+Y\+P\+E\+O\+F\+\_\+\+S\+T\+R\+U\+CT}}~12
+\item
+\#define \mbox{\hyperlink{typeof_8h_ac627e9a5f9b283cb8904d73c941f1896}{T\+Y\+P\+E\+O\+F\+\_\+\+A\+R\+R\+AY}}~13
+\item
+\#define \mbox{\hyperlink{typeof_8h_a3adf36b394d11d9b35f45ad8c4544670}{T\+Y\+P\+E\+O\+F\+\_\+\+F\+U\+N\+C\+T\+I\+ON}}~14
+\item
+\#define \mbox{\hyperlink{typeof_8h_a2541fdaacae83bbcc99dcedf464c7c94}{T\+Y\+P\+E\+O\+F\+\_\+\+P\+O\+I\+N\+T\+ER}}~15
+\item
+\#define \mbox{\hyperlink{typeof_8h_a5301fd3500fb9f9454a17f9d4c5d0e8c}{T\+Y\+P\+E\+O\+F\+\_\+\+F\+P\+O\+I\+N\+T\+ER}}~16
+\item
+\#define \mbox{\hyperlink{typeof_8h_a6131cee0fe0abf1cf2fcfcec830535d4}{T\+Y\+P\+E\+O\+F\+\_\+\+C\+P\+O\+I\+N\+T\+ER}}~17
+\item
+\#define \mbox{\hyperlink{typeof_8h_adbec06ba3e6f0e2dcbefd788978f9ad6}{T\+Y\+P\+E\+O\+F\+\_\+\+G\+P\+O\+I\+N\+T\+ER}}~18
+\item
+\#define \mbox{\hyperlink{typeof_8h_ad38c6e5ceee5c5fe3703690fc32b23ae}{T\+Y\+P\+E\+O\+F\+\_\+\+P\+P\+O\+I\+N\+T\+ER}}~19
+\item
+\#define \mbox{\hyperlink{typeof_8h_aa56dfc698692fb3f2d64c1a4b192f9c0}{T\+Y\+P\+E\+O\+F\+\_\+\+I\+P\+O\+I\+N\+T\+ER}}~20
+\item
+\#define \mbox{\hyperlink{typeof_8h_a73d0c1f1fc515b199acb5631f8a16898}{T\+Y\+P\+E\+O\+F\+\_\+\+E\+E\+P\+P\+O\+I\+N\+T\+ER}}~21
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{typeof_8h_a4bb94b94304a21b7bd462be44f9d197a}\label{typeof_8h_a4bb94b94304a21b7bd462be44f9d197a}}
+\index{typeof.h@{typeof.h}!TYPEOF\_INT@{TYPEOF\_INT}}
+\index{TYPEOF\_INT@{TYPEOF\_INT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_INT}{TYPEOF\_INT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+I\+NT~1}
+
+\mbox{\Hypertarget{typeof_8h_a58af351d7955729a79e425a88bf86bab}\label{typeof_8h_a58af351d7955729a79e425a88bf86bab}}
+\index{typeof.h@{typeof.h}!TYPEOF\_SHORT@{TYPEOF\_SHORT}}
+\index{TYPEOF\_SHORT@{TYPEOF\_SHORT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_SHORT}{TYPEOF\_SHORT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+S\+H\+O\+RT~2}
+
+\mbox{\Hypertarget{typeof_8h_ae042a4e85033237ee9fbc1af3cac7025}\label{typeof_8h_ae042a4e85033237ee9fbc1af3cac7025}}
+\index{typeof.h@{typeof.h}!TYPEOF\_CHAR@{TYPEOF\_CHAR}}
+\index{TYPEOF\_CHAR@{TYPEOF\_CHAR}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_CHAR}{TYPEOF\_CHAR}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+C\+H\+AR~3}
+
+\mbox{\Hypertarget{typeof_8h_ab4833544b1f4060806106baa0eb916e6}\label{typeof_8h_ab4833544b1f4060806106baa0eb916e6}}
+\index{typeof.h@{typeof.h}!TYPEOF\_LONG@{TYPEOF\_LONG}}
+\index{TYPEOF\_LONG@{TYPEOF\_LONG}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_LONG}{TYPEOF\_LONG}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+L\+O\+NG~4}
+
+\mbox{\Hypertarget{typeof_8h_a3d694a422fb7a54f15ddf1c9749567f7}\label{typeof_8h_a3d694a422fb7a54f15ddf1c9749567f7}}
+\index{typeof.h@{typeof.h}!TYPEOF\_FLOAT@{TYPEOF\_FLOAT}}
+\index{TYPEOF\_FLOAT@{TYPEOF\_FLOAT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_FLOAT}{TYPEOF\_FLOAT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+F\+L\+O\+AT~5}
+
+\mbox{\Hypertarget{typeof_8h_a709c014873866243abc0275099f676f5}\label{typeof_8h_a709c014873866243abc0275099f676f5}}
+\index{typeof.h@{typeof.h}!TYPEOF\_FIXED16X16@{TYPEOF\_FIXED16X16}}
+\index{TYPEOF\_FIXED16X16@{TYPEOF\_FIXED16X16}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_FIXED16X16}{TYPEOF\_FIXED16X16}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+F\+I\+X\+E\+D16\+X16~6}
+
+\mbox{\Hypertarget{typeof_8h_a5b91f9d826e3c5c6873bc86cdce3d517}\label{typeof_8h_a5b91f9d826e3c5c6873bc86cdce3d517}}
+\index{typeof.h@{typeof.h}!TYPEOF\_BIT@{TYPEOF\_BIT}}
+\index{TYPEOF\_BIT@{TYPEOF\_BIT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_BIT}{TYPEOF\_BIT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+B\+IT~7}
+
+\mbox{\Hypertarget{typeof_8h_a5b9f605bb8dcac27ddfab4e9a8c9a2ca}\label{typeof_8h_a5b9f605bb8dcac27ddfab4e9a8c9a2ca}}
+\index{typeof.h@{typeof.h}!TYPEOF\_BITFIELD@{TYPEOF\_BITFIELD}}
+\index{TYPEOF\_BITFIELD@{TYPEOF\_BITFIELD}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_BITFIELD}{TYPEOF\_BITFIELD}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+B\+I\+T\+F\+I\+E\+LD~8}
+
+\mbox{\Hypertarget{typeof_8h_a09fcac98c1e69b32ea223eada74e30bd}\label{typeof_8h_a09fcac98c1e69b32ea223eada74e30bd}}
+\index{typeof.h@{typeof.h}!TYPEOF\_SBIT@{TYPEOF\_SBIT}}
+\index{TYPEOF\_SBIT@{TYPEOF\_SBIT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_SBIT}{TYPEOF\_SBIT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+S\+B\+IT~9}
+
+\mbox{\Hypertarget{typeof_8h_aae32132bbca6df6423182122d95b00cd}\label{typeof_8h_aae32132bbca6df6423182122d95b00cd}}
+\index{typeof.h@{typeof.h}!TYPEOF\_SFR@{TYPEOF\_SFR}}
+\index{TYPEOF\_SFR@{TYPEOF\_SFR}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_SFR}{TYPEOF\_SFR}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+S\+FR~10}
+
+\mbox{\Hypertarget{typeof_8h_a03582306431a63d84cc721132ed683c8}\label{typeof_8h_a03582306431a63d84cc721132ed683c8}}
+\index{typeof.h@{typeof.h}!TYPEOF\_VOID@{TYPEOF\_VOID}}
+\index{TYPEOF\_VOID@{TYPEOF\_VOID}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_VOID}{TYPEOF\_VOID}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+V\+O\+ID~11}
+
+\mbox{\Hypertarget{typeof_8h_a4f9ce6ed9178ad58f706e74cd8c24e1f}\label{typeof_8h_a4f9ce6ed9178ad58f706e74cd8c24e1f}}
+\index{typeof.h@{typeof.h}!TYPEOF\_STRUCT@{TYPEOF\_STRUCT}}
+\index{TYPEOF\_STRUCT@{TYPEOF\_STRUCT}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_STRUCT}{TYPEOF\_STRUCT}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+S\+T\+R\+U\+CT~12}
+
+\mbox{\Hypertarget{typeof_8h_ac627e9a5f9b283cb8904d73c941f1896}\label{typeof_8h_ac627e9a5f9b283cb8904d73c941f1896}}
+\index{typeof.h@{typeof.h}!TYPEOF\_ARRAY@{TYPEOF\_ARRAY}}
+\index{TYPEOF\_ARRAY@{TYPEOF\_ARRAY}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_ARRAY}{TYPEOF\_ARRAY}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+A\+R\+R\+AY~13}
+
+\mbox{\Hypertarget{typeof_8h_a3adf36b394d11d9b35f45ad8c4544670}\label{typeof_8h_a3adf36b394d11d9b35f45ad8c4544670}}
+\index{typeof.h@{typeof.h}!TYPEOF\_FUNCTION@{TYPEOF\_FUNCTION}}
+\index{TYPEOF\_FUNCTION@{TYPEOF\_FUNCTION}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_FUNCTION}{TYPEOF\_FUNCTION}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+F\+U\+N\+C\+T\+I\+ON~14}
+
+\mbox{\Hypertarget{typeof_8h_a2541fdaacae83bbcc99dcedf464c7c94}\label{typeof_8h_a2541fdaacae83bbcc99dcedf464c7c94}}
+\index{typeof.h@{typeof.h}!TYPEOF\_POINTER@{TYPEOF\_POINTER}}
+\index{TYPEOF\_POINTER@{TYPEOF\_POINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_POINTER}{TYPEOF\_POINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+P\+O\+I\+N\+T\+ER~15}
+
+\mbox{\Hypertarget{typeof_8h_a5301fd3500fb9f9454a17f9d4c5d0e8c}\label{typeof_8h_a5301fd3500fb9f9454a17f9d4c5d0e8c}}
+\index{typeof.h@{typeof.h}!TYPEOF\_FPOINTER@{TYPEOF\_FPOINTER}}
+\index{TYPEOF\_FPOINTER@{TYPEOF\_FPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_FPOINTER}{TYPEOF\_FPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+F\+P\+O\+I\+N\+T\+ER~16}
+
+\mbox{\Hypertarget{typeof_8h_a6131cee0fe0abf1cf2fcfcec830535d4}\label{typeof_8h_a6131cee0fe0abf1cf2fcfcec830535d4}}
+\index{typeof.h@{typeof.h}!TYPEOF\_CPOINTER@{TYPEOF\_CPOINTER}}
+\index{TYPEOF\_CPOINTER@{TYPEOF\_CPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_CPOINTER}{TYPEOF\_CPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+C\+P\+O\+I\+N\+T\+ER~17}
+
+\mbox{\Hypertarget{typeof_8h_adbec06ba3e6f0e2dcbefd788978f9ad6}\label{typeof_8h_adbec06ba3e6f0e2dcbefd788978f9ad6}}
+\index{typeof.h@{typeof.h}!TYPEOF\_GPOINTER@{TYPEOF\_GPOINTER}}
+\index{TYPEOF\_GPOINTER@{TYPEOF\_GPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_GPOINTER}{TYPEOF\_GPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+G\+P\+O\+I\+N\+T\+ER~18}
+
+\mbox{\Hypertarget{typeof_8h_ad38c6e5ceee5c5fe3703690fc32b23ae}\label{typeof_8h_ad38c6e5ceee5c5fe3703690fc32b23ae}}
+\index{typeof.h@{typeof.h}!TYPEOF\_PPOINTER@{TYPEOF\_PPOINTER}}
+\index{TYPEOF\_PPOINTER@{TYPEOF\_PPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_PPOINTER}{TYPEOF\_PPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+P\+P\+O\+I\+N\+T\+ER~19}
+
+\mbox{\Hypertarget{typeof_8h_aa56dfc698692fb3f2d64c1a4b192f9c0}\label{typeof_8h_aa56dfc698692fb3f2d64c1a4b192f9c0}}
+\index{typeof.h@{typeof.h}!TYPEOF\_IPOINTER@{TYPEOF\_IPOINTER}}
+\index{TYPEOF\_IPOINTER@{TYPEOF\_IPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_IPOINTER}{TYPEOF\_IPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+I\+P\+O\+I\+N\+T\+ER~20}
+
+\mbox{\Hypertarget{typeof_8h_a73d0c1f1fc515b199acb5631f8a16898}\label{typeof_8h_a73d0c1f1fc515b199acb5631f8a16898}}
+\index{typeof.h@{typeof.h}!TYPEOF\_EEPPOINTER@{TYPEOF\_EEPPOINTER}}
+\index{TYPEOF\_EEPPOINTER@{TYPEOF\_EEPPOINTER}!typeof.h@{typeof.h}}
+\doxyparagraph{\texorpdfstring{TYPEOF\_EEPPOINTER}{TYPEOF\_EEPPOINTER}}
+{\footnotesize\ttfamily \#define T\+Y\+P\+E\+O\+F\+\_\+\+E\+E\+P\+P\+O\+I\+N\+T\+ER~21}
+
diff --git a/docs/latex/types_8h.tex b/docs/latex/types_8h.tex
new file mode 100644
index 00000000..9150552c
--- /dev/null
+++ b/docs/latex/types_8h.tex
@@ -0,0 +1,52 @@
+\hypertarget{types_8h}{}\doxysubsection{types.\+h File Reference}
+\label{types_8h}\index{types.h@{types.h}}
+{\ttfamily \#include $<$asm/types.\+h$>$}\newline
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{types_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}{N\+U\+LL}}~0
+\item
+\#define \mbox{\hyperlink{types_8h_aa93f0eb578d23995850d61f7d61c55c1}{F\+A\+L\+SE}}~0
+\item
+\#define \mbox{\hyperlink{types_8h_aa8cecfc5c5c054d2875c03e77b7be15d}{T\+R\+UE}}~1
+\end{DoxyCompactItemize}
+\doxysubsubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef void $\ast$ \mbox{\hyperlink{types_8h_ae51a81000f343b8ec43bca1f6a723d7b}{P\+O\+I\+N\+T\+ER}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Basic types. ~\newline
+ Directly include the port specific file.
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{types_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}\label{types_8h_a070d2ce7b6bb7e5c05602aa8c308d0c4}}
+\index{types.h@{types.h}!NULL@{NULL}}
+\index{NULL@{NULL}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{NULL}{NULL}}
+{\footnotesize\ttfamily \#define N\+U\+LL~0}
+
+Good \textquotesingle{}ol N\+U\+LL. \mbox{\Hypertarget{types_8h_aa93f0eb578d23995850d61f7d61c55c1}\label{types_8h_aa93f0eb578d23995850d61f7d61c55c1}}
+\index{types.h@{types.h}!FALSE@{FALSE}}
+\index{FALSE@{FALSE}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{FALSE}{FALSE}}
+{\footnotesize\ttfamily \#define F\+A\+L\+SE~0}
+
+A \textquotesingle{}false\textquotesingle{} value. \mbox{\Hypertarget{types_8h_aa8cecfc5c5c054d2875c03e77b7be15d}\label{types_8h_aa8cecfc5c5c054d2875c03e77b7be15d}}
+\index{types.h@{types.h}!TRUE@{TRUE}}
+\index{TRUE@{TRUE}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{TRUE}{TRUE}}
+{\footnotesize\ttfamily \#define T\+R\+UE~1}
+
+A \textquotesingle{}true\textquotesingle{} value.
+
+\doxysubsubsection{Typedef Documentation}
+\mbox{\Hypertarget{types_8h_ae51a81000f343b8ec43bca1f6a723d7b}\label{types_8h_ae51a81000f343b8ec43bca1f6a723d7b}}
+\index{types.h@{types.h}!POINTER@{POINTER}}
+\index{POINTER@{POINTER}!types.h@{types.h}}
+\doxyparagraph{\texorpdfstring{POINTER}{POINTER}}
+{\footnotesize\ttfamily typedef void$\ast$ \mbox{\hyperlink{types_8h_ae51a81000f343b8ec43bca1f6a723d7b}{P\+O\+I\+N\+T\+ER}}}
+
+No longer used.
\ No newline at end of file
diff --git a/docs/latex/union____far__ptr.tex b/docs/latex/union____far__ptr.tex
new file mode 100644
index 00000000..f4e747e0
--- /dev/null
+++ b/docs/latex/union____far__ptr.tex
@@ -0,0 +1,74 @@
+\hypertarget{union____far__ptr}{}\doxysubsection{\+\_\+\+\_\+far\+\_\+ptr Union Reference}
+\label{union____far__ptr}\index{\_\_far\_ptr@{\_\_far\_ptr}}
+
+
+{\ttfamily \#include $<$far\+\_\+ptr.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}} \mbox{\hyperlink{union____far__ptr_afabdeeef2b4056bc9c2d2e34b030f348}{ptr}}
+\item
+\begin{tabbing}
+xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
+struct \{\\
+\>void $\ast$ \mbox{\hyperlink{union____far__ptr_a60fef2b4efac12d73fd609373631ac4e}{ofs}}\\
+\>\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} \mbox{\hyperlink{union____far__ptr_a13c65a38be633a3ac219c3b5b3be5ce6}{seg}}\\
+\} \mbox{\hyperlink{union____far__ptr_ab77baeba835fa23f6d96c641e7ee2b06}{segofs}}\\
+
+\end{tabbing}\item
+\begin{tabbing}
+xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
+struct \{\\
+\>void($\ast$ \mbox{\hyperlink{union____far__ptr_a90065c72477187e9f9c97c07c90f6af9}{fn}} )()\\
+\>\mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\_t}} \mbox{\hyperlink{union____far__ptr_a13c65a38be633a3ac219c3b5b3be5ce6}{seg}}\\
+\} \mbox{\hyperlink{union____far__ptr_a8c6e2345a04a58dc76339923baffcbe3}{segfn}}\\
+
+\end{tabbing}\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Union for working with members of a F\+A\+R\+\_\+\+P\+TR
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{union____far__ptr_afabdeeef2b4056bc9c2d2e34b030f348}\label{union____far__ptr_afabdeeef2b4056bc9c2d2e34b030f348}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!ptr@{ptr}}
+\index{ptr@{ptr}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{ptr}{ptr}}
+{\footnotesize\ttfamily \mbox{\hyperlink{far__ptr_8h_a7c6f52121dd07af29b477f4e64314842}{F\+A\+R\+\_\+\+P\+TR}} \+\_\+\+\_\+far\+\_\+ptr\+::ptr}
+
+\mbox{\Hypertarget{union____far__ptr_a60fef2b4efac12d73fd609373631ac4e}\label{union____far__ptr_a60fef2b4efac12d73fd609373631ac4e}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!ofs@{ofs}}
+\index{ofs@{ofs}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{ofs}{ofs}}
+{\footnotesize\ttfamily void$\ast$ \+\_\+\+\_\+far\+\_\+ptr\+::ofs}
+
+\mbox{\Hypertarget{union____far__ptr_a13c65a38be633a3ac219c3b5b3be5ce6}\label{union____far__ptr_a13c65a38be633a3ac219c3b5b3be5ce6}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!seg@{seg}}
+\index{seg@{seg}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{seg}{seg}}
+{\footnotesize\ttfamily \mbox{\hyperlink{stdint_8h_adf4d876453337156dde61095e1f20223}{uint16\+\_\+t}} \+\_\+\+\_\+far\+\_\+ptr\+::seg}
+
+\mbox{\Hypertarget{union____far__ptr_ab77baeba835fa23f6d96c641e7ee2b06}\label{union____far__ptr_ab77baeba835fa23f6d96c641e7ee2b06}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!segofs@{segofs}}
+\index{segofs@{segofs}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{segofs}{segofs}}
+{\footnotesize\ttfamily struct \{ ... \} \+\_\+\+\_\+far\+\_\+ptr\+::segofs}
+
+\mbox{\Hypertarget{union____far__ptr_a90065c72477187e9f9c97c07c90f6af9}\label{union____far__ptr_a90065c72477187e9f9c97c07c90f6af9}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!fn@{fn}}
+\index{fn@{fn}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{fn}{fn}}
+{\footnotesize\ttfamily void($\ast$ \+\_\+\+\_\+far\+\_\+ptr\+::fn) ()}
+
+\mbox{\Hypertarget{union____far__ptr_a8c6e2345a04a58dc76339923baffcbe3}\label{union____far__ptr_a8c6e2345a04a58dc76339923baffcbe3}}
+\index{\_\_far\_ptr@{\_\_far\_ptr}!segfn@{segfn}}
+\index{segfn@{segfn}!\_\_far\_ptr@{\_\_far\_ptr}}
+\doxyparagraph{\texorpdfstring{segfn}{segfn}}
+{\footnotesize\ttfamily struct \{ ... \} \+\_\+\+\_\+far\+\_\+ptr\+::segfn}
+
+
+
+The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+gbdk/\mbox{\hyperlink{far__ptr_8h}{far\+\_\+ptr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/union__fixed.tex b/docs/latex/union__fixed.tex
new file mode 100644
index 00000000..0640509e
--- /dev/null
+++ b/docs/latex/union__fixed.tex
@@ -0,0 +1,70 @@
+\hypertarget{union__fixed}{}\doxysubsection{\+\_\+fixed Union Reference}
+\label{union__fixed}\index{\_fixed@{\_fixed}}
+
+
+{\ttfamily \#include $<$types.\+h$>$}
+
+\doxysubsubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+\begin{tabbing}
+xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
+struct \{\\
+\>\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{UBYTE}} \mbox{\hyperlink{union__fixed_ac44ac5f62ed7369c444b6f13d9e1d9bc}{l}}\\
+\>\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{UBYTE}} \mbox{\hyperlink{union__fixed_acd5ac56a5ed6650d5797e89b278a972f}{h}}\\
+\}; \\
+
+\end{tabbing}\item
+\begin{tabbing}
+xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill
+struct \{\\
+\>\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{UBYTE}} \mbox{\hyperlink{union__fixed_ac44ac5f62ed7369c444b6f13d9e1d9bc}{l}}\\
+\>\mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{UBYTE}} \mbox{\hyperlink{union__fixed_acd5ac56a5ed6650d5797e89b278a972f}{h}}\\
+\} \mbox{\hyperlink{union__fixed_ac0efdf5ee7302ad64dbc51cabc3659d3}{b}}\\
+
+\end{tabbing}\item
+\mbox{\hyperlink{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}{U\+W\+O\+RD}} \mbox{\hyperlink{union__fixed_ab16f9fd51f817308d109b9b35866f310}{w}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Detailed Description}
+Useful definition for working with 8 bit + 8 bit fixed point values
+
+Use {\ttfamily .w} to access the variable as unsigned 16 bit type.
+
+Use {\ttfamily .b.\+h} and {\ttfamily .b.\+l} (or just {\ttfamily .h} and {\ttfamily .l}) to directly access it\textquotesingle{}s high and low unsigned 8 bit values.
+
+\doxysubsubsection{Field Documentation}
+\mbox{\Hypertarget{union__fixed_ac44ac5f62ed7369c444b6f13d9e1d9bc}\label{union__fixed_ac44ac5f62ed7369c444b6f13d9e1d9bc}}
+\index{\_fixed@{\_fixed}!l@{l}}
+\index{l@{l}!\_fixed@{\_fixed}}
+\doxyparagraph{\texorpdfstring{l}{l}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \+\_\+fixed\+::l}
+
+\mbox{\Hypertarget{union__fixed_acd5ac56a5ed6650d5797e89b278a972f}\label{union__fixed_acd5ac56a5ed6650d5797e89b278a972f}}
+\index{\_fixed@{\_fixed}!h@{h}}
+\index{h@{h}!\_fixed@{\_fixed}}
+\doxyparagraph{\texorpdfstring{h}{h}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a280213815420791851f7e59bdc8a3c95}{U\+B\+Y\+TE}} \+\_\+fixed\+::h}
+
+\mbox{\Hypertarget{union__fixed_abd9258127ce7af017d5f807fa297950a}\label{union__fixed_abd9258127ce7af017d5f807fa297950a}}
+\doxyparagraph{\texorpdfstring{"@1}{@1}}
+{\footnotesize\ttfamily struct \{ ... \} }
+
+\mbox{\Hypertarget{union__fixed_ac0efdf5ee7302ad64dbc51cabc3659d3}\label{union__fixed_ac0efdf5ee7302ad64dbc51cabc3659d3}}
+\index{\_fixed@{\_fixed}!b@{b}}
+\index{b@{b}!\_fixed@{\_fixed}}
+\doxyparagraph{\texorpdfstring{b}{b}}
+{\footnotesize\ttfamily struct \{ ... \} \+\_\+fixed\+::b}
+
+\mbox{\Hypertarget{union__fixed_ab16f9fd51f817308d109b9b35866f310}\label{union__fixed_ab16f9fd51f817308d109b9b35866f310}}
+\index{\_fixed@{\_fixed}!w@{w}}
+\index{w@{w}!\_fixed@{\_fixed}}
+\doxyparagraph{\texorpdfstring{w}{w}}
+{\footnotesize\ttfamily \mbox{\hyperlink{asm_2types_8h_a9e551e7c1bd8feb51e8eefd109966f75}{U\+W\+O\+RD}} \+\_\+fixed\+::w}
+
+
+
+The documentation for this union was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+asm/\mbox{\hyperlink{asm_2types_8h}{types.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/latex/version_8h.tex b/docs/latex/version_8h.tex
new file mode 100644
index 00000000..e2243680
--- /dev/null
+++ b/docs/latex/version_8h.tex
@@ -0,0 +1,16 @@
+\hypertarget{version_8h}{}\doxysubsection{gbdk/version.h File Reference}
+\label{version_8h}\index{gbdk/version.h@{gbdk/version.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{version_8h_a459449876dfba6299bf055c882d78334}{\+\_\+\+\_\+\+G\+B\+D\+K\+\_\+\+V\+E\+R\+S\+I\+ON}}~405
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{version_8h_a459449876dfba6299bf055c882d78334}\label{version_8h_a459449876dfba6299bf055c882d78334}}
+\index{version.h@{version.h}!\_\_GBDK\_VERSION@{\_\_GBDK\_VERSION}}
+\index{\_\_GBDK\_VERSION@{\_\_GBDK\_VERSION}!version.h@{version.h}}
+\doxyparagraph{\texorpdfstring{\_\_GBDK\_VERSION}{\_\_GBDK\_VERSION}}
+{\footnotesize\ttfamily \#define \+\_\+\+\_\+\+G\+B\+D\+K\+\_\+\+V\+E\+R\+S\+I\+ON~405}
+
diff --git a/docs/latex/z80_2provides_8h.tex b/docs/latex/z80_2provides_8h.tex
new file mode 100644
index 00000000..112558d8
--- /dev/null
+++ b/docs/latex/z80_2provides_8h.tex
@@ -0,0 +1,32 @@
+\hypertarget{z80_2provides_8h}{}\doxysubsection{asm/z80/provides.h File Reference}
+\label{z80_2provides_8h}\index{asm/z80/provides.h@{asm/z80/provides.h}}
+\doxysubsubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{z80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}{U\+S\+E\+\_\+\+C\+\_\+\+M\+E\+M\+C\+PY}}~0
+\item
+\#define \mbox{\hyperlink{z80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}{U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+PY}}~0
+\item
+\#define \mbox{\hyperlink{z80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}{U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+MP}}~1
+\end{DoxyCompactItemize}
+
+
+\doxysubsubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{z80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}\label{z80_2provides_8h_a9dd4f1ec2939e7beb7ef40e350cbba47}}
+\index{provides.h@{provides.h}!USE\_C\_MEMCPY@{USE\_C\_MEMCPY}}
+\index{USE\_C\_MEMCPY@{USE\_C\_MEMCPY}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_MEMCPY}{USE\_C\_MEMCPY}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+M\+E\+M\+C\+PY~0}
+
+\mbox{\Hypertarget{z80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}\label{z80_2provides_8h_ac6678abba8f5929bc8b33f3202e568f0}}
+\index{provides.h@{provides.h}!USE\_C\_STRCPY@{USE\_C\_STRCPY}}
+\index{USE\_C\_STRCPY@{USE\_C\_STRCPY}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_STRCPY}{USE\_C\_STRCPY}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+PY~0}
+
+\mbox{\Hypertarget{z80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}\label{z80_2provides_8h_a809a7bd0afcfb7500b5108a9e976b85c}}
+\index{provides.h@{provides.h}!USE\_C\_STRCMP@{USE\_C\_STRCMP}}
+\index{USE\_C\_STRCMP@{USE\_C\_STRCMP}!provides.h@{provides.h}}
+\doxyparagraph{\texorpdfstring{USE\_C\_STRCMP}{USE\_C\_STRCMP}}
+{\footnotesize\ttfamily \#define U\+S\+E\+\_\+\+C\+\_\+\+S\+T\+R\+C\+MP~1}
+