Macro defines for system EEPROM access that were not intended to be
part of the API have been made into protected constexpr variables of
the Arduboy2Base class.
Issue reported by @MrBlinky
For drawBitmap(), drawSlowXYBitmap() and drawCompressed() the initial
check for the bitmap being entirely off screen would sometimes consider
a bitmap to be partially on screen when it is only one pixel above or
to the left of the screen. This would result in unnecessarily doing the
work to draw the bitmap when none of it would be visible.
Includes some suggestions and guidance by @Pharap
API:
- Rename non-API function swap() to swapInt16()
- Make swapInt16(), drawCircleHelper(), fillCircleHelper() and
struct BitStreamReader protected members of Arduboy2Base
- Add #define ARDUBOY_UNIT_NAME_BUFFER_SIZE for the size of a buffer
to hold a Unit Name
- Move the position of the PROGMEM keyword for lcdBootProgram[]
for consistency
Documentation:
- Remove absolute values referring to a Unit Name
- More details relating to the use of the Unit Name
- More details relating to the font and text functions
- Other minor documentation changes and spelling corrections
The new compiler in Arduino IDE 1.8.6/1.8.7 has an optimization glitch
where it fails to see the difference between a data structure in RAM
and in PROGMEM when the data is the same and optimizes one out.
drawPixel() is unable to fetch the correct pixel mask from the
bitshift_left array in PROGMEM causing junk to be drawn.
The bitshift_left[] array has now been optimised out and drawPixel()
will function properly. The optimization uses the same number of cycles
and saves 6 bytes.
drawPixel() has also been made static so the Arduboy object pointer is
no longer needlesly passed on to drawPixel() saving more bytes.
The call to generateRandomSeed() in initRandomSeed() was missing
parentheses.
Added keyword for generateRandomSeed.
Minor code changes, and documentation changes and additions.
Flag SYS_FLAG_SHOW_LOGO_LEDS added to EEPROM_SYS_FLAGS.
The boot logo functions check the flag and leave the RGB LED off if
the flag isn't set.
Added functions writeShowBootLogoLEDsFlag() and
readShowBootLogoLEDsFlag() for writing and reading the
SYS_FLAG_SHOW_LOGO_LEDS flag.
Example sketch SetSystemEEPROM modified to allow setting the
SYS_FLAG_SHOW_LOGO_LEDS flag.
Flag SYS_FLAG_SHOW_LOGO added to EEPROM_SYS_FLAGS. The boot logo
functions check the flag and bypass the logo sequence if the flag
isn't set.
Added functions writeShowBootLogoFlag() and readShowBootLogoFlag()
for writing and reading the SYS_FLAG_SHOW_LOGO flag.
Renamed example sketch SetNameAndID to SetSystemEEPROM and added
the ability to set the SYS_FLAG_SHOW_LOGO flag, plus menus to reset
the system and user EEPROM areas.
The SpritesB class has functions identical to those in Sprites.
When used in place of Sprites it will usually reduce code size (at the
expense of slower execution speed). Code size reduction is accomplished
by factoring all draw modes into the same loop.
Modifications made to the Sprites class to create this class made by
@dxxb (Delio Brignoli).
Creation of the SpritesB class and documentation by
@MLXXXp (Scott Allen).
Also, bootLogoSpritesBSelfMasked() and bootLogoSpritesBOverwrite()
alternative boot logo functions added by @MLXXXp.
New function waitNoButtons() replaces the code at the end of begin()
that waits for all buttons to be released. This is to make it easier
to add back this functionality when using boot() in place of begin().
- Inlined : 332 -> 358 ops/ms
- Non-inlined : 222 -> 303 ops/ms
Moves most of the pixel offset calculation math into assembly.
Also uses a shift lookup table vs calculting bit shifts on the
CPU (which is slow)
Same as Arduino delay() except takes a 16 bit value.
Mainly added to save some code in the library but can be used by
sketches for the same purpose.
Also changed a delay in bootLogoText() to match a previous change in
bootLogo()
New functions bootLogoCompressed(), bootLogoSpritesSelfMasked() and
bootLogoSpritesOverwrite() can be used in place of bootLogo() to
reduce code size in cases where their drawing functions are shared
with the same functions used by the sketch.
New function bootLogoShell() added to provide common code for the
above functions.
Also, the Sprites class functions, and functions used for drawing the
logos, were made static.
- Added a flag in system EEPROM to indicate if the unit name
should be displayed at the end of the boot logo sequence.
Function bootLogoExtra() displays the unit name only if the
flag is set.
- Added functions writeShowUnitNameFlag() and readShowUnitNameFlag()
to write and read the "Show Unit Name" flag in EEPROM.
- Enhanced the SetNameAndID example sketch to allow setting the
"Show Unit Name" flag in EEPROM.
- Timer 0 is disabled in flashlight() and safeMode() in case its
variables overlap the bootloader "magic key" location.
- Flashlight mode never exits if invoked.
- Made safeMode() public for use as a smaller code size alternative
to flashlight().
This eliminates calls to pinMode(), digitalWrite(), functions to
initialize hardware, etc.
New 2 parameter version of digitalWriteRGB() added, which sets an
individual RGB LED on or off digitally.
New function SPItransfer() added to replace Arduino SPI.transfer().