Update ArduboyFX and ArduboyTones libraries
changed Arduboy FX library version to 1.0.2 Fixed drawBitmap incorrect mask on images with non multiple of 8 heights Minor comment edits changed ArduboyTones library version to 1.0.4 Optimized Interrupt service routine saving ~52 bytes of PROGMEM
This commit is contained in:
parent
694837952d
commit
c524df36e1
|
@ -1,5 +1,5 @@
|
||||||
name=ArduboyFX
|
name=ArduboyFX
|
||||||
version=1.0.1
|
version=1.0.2
|
||||||
author=Mr.Blinky
|
author=Mr.Blinky
|
||||||
maintainer=mstr.blinky@gmail.com
|
maintainer=mstr.blinky@gmail.com
|
||||||
sentence=The Arduboy FX library.
|
sentence=The Arduboy FX library.
|
||||||
|
|
|
@ -501,14 +501,15 @@ void FX::drawBitmap(int16_t x, int16_t y, uint24_t address, uint8_t frame, uint8
|
||||||
" clc \n" // yshift == 1, clear carry
|
" clc \n" // yshift == 1, clear carry
|
||||||
" ror %[mode] \n" // carry to mode dbfExtraRow
|
" ror %[mode] \n" // carry to mode dbfExtraRow
|
||||||
" \n"
|
" \n"
|
||||||
" ldi %[rowmask], 0x02 \n" // rowmask = 0xFF >> (height & 7);
|
" ldi %[rowmask], 0x02 \n" // rowmask = 0xFF >> (8 - (height & 7));
|
||||||
" sbrs %[height], 1 \n"
|
" sbrc %[height], 1 \n"
|
||||||
" ldi %[rowmask], 0x08 \n"
|
" ldi %[rowmask], 0x08 \n"
|
||||||
" sbrs %[height], 2 \n"
|
" sbrc %[height], 2 \n"
|
||||||
" swap %[rowmask] \n"
|
" swap %[rowmask] \n"
|
||||||
" sbrs %[height], 0 \n"
|
" sbrs %[height], 0 \n"
|
||||||
" lsl %[rowmask] \n"
|
" lsr %[rowmask] \n"
|
||||||
" dec %[rowmask] \n"
|
" dec %[rowmask] \n"
|
||||||
|
" breq .+4 \n"
|
||||||
" cpi %[renderheight], 8 \n" // if (renderheight >= 8) rowmask = 0xFF;
|
" cpi %[renderheight], 8 \n" // if (renderheight >= 8) rowmask = 0xFF;
|
||||||
" brlt .+2 \n"
|
" brlt .+2 \n"
|
||||||
" ldi %[rowmask], 0xFF \n"
|
" ldi %[rowmask], 0xFF \n"
|
||||||
|
@ -519,7 +520,7 @@ void FX::drawBitmap(int16_t x, int16_t y, uint24_t address, uint8_t frame, uint8
|
||||||
" out %[spdr], r1 \n" // start next read
|
" out %[spdr], r1 \n" // start next read
|
||||||
" \n"
|
" \n"
|
||||||
" sbrc %[mode], %[reverseblack] \n" // test reverse mode
|
" sbrc %[mode], %[reverseblack] \n" // test reverse mode
|
||||||
" com r0 \n" // reverse bitmap data
|
" eor r0, %[rowmask] \n" // reverse bitmap data
|
||||||
" mov r24, %[rowmask] \n" // temporary move rowmask
|
" mov r24, %[rowmask] \n" // temporary move rowmask
|
||||||
" sbrc %[mode], %[whiteblack] \n" // for black and white modes:
|
" sbrc %[mode], %[whiteblack] \n" // for black and white modes:
|
||||||
" mov r24, r0 \n" // rowmask = bitmap
|
" mov r24, r0 \n" // rowmask = bitmap
|
||||||
|
@ -613,7 +614,7 @@ void FX::drawBitmap(int16_t x, int16_t y, uint24_t address, uint8_t frame, uint8
|
||||||
"r24", "r25"
|
"r24", "r25"
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
uint8_t lastmask = bitShiftRightMaskUInt8(height); // mask for bottom most pixels
|
uint8_t lastmask = bitShiftRightMaskUInt8(8 - height); // mask for bottom most pixels
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
seekData(address);
|
seekData(address);
|
||||||
|
@ -626,7 +627,7 @@ void FX::drawBitmap(int16_t x, int16_t y, uint24_t address, uint8_t frame, uint8
|
||||||
for (uint8_t c = 0; c < renderwidth; c++)
|
for (uint8_t c = 0; c < renderwidth; c++)
|
||||||
{
|
{
|
||||||
uint8_t bitmapbyte = readUnsafe();
|
uint8_t bitmapbyte = readUnsafe();
|
||||||
if (mode & _BV(dbfReverseBlack)) bitmapbyte ^= 0xFF;
|
if (mode & _BV(dbfReverseBlack)) bitmapbyte ^= rowmask;
|
||||||
uint8_t maskbyte = rowmask;
|
uint8_t maskbyte = rowmask;
|
||||||
if (mode & _BV(dbfWhiteBlack)) maskbyte = bitmapbyte;
|
if (mode & _BV(dbfWhiteBlack)) maskbyte = bitmapbyte;
|
||||||
if (mode & _BV(dbfBlack)) bitmapbyte = 0;
|
if (mode & _BV(dbfBlack)) bitmapbyte = 0;
|
||||||
|
|
|
@ -12,15 +12,15 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//progam data and save data pages(set by PC manager tool)
|
// progam data and save data pages(set by PC manager tool)
|
||||||
constexpr uint16_t FX_VECTOR_KEY_VALUE = 0x9518; /* RETI instruction used a magic key */
|
constexpr uint16_t FX_VECTOR_KEY_VALUE = 0x9518; /* RETI instruction used as magic key */
|
||||||
constexpr uint16_t FX_DATA_VECTOR_KEY_POINTER = 0x0014; /* reserved interrupt vector 5 area */
|
constexpr uint16_t FX_DATA_VECTOR_KEY_POINTER = 0x0014; /* reserved interrupt vector 5 area */
|
||||||
constexpr uint16_t FX_DATA_VECTOR_PAGE_POINTER = 0x0016;
|
constexpr uint16_t FX_DATA_VECTOR_PAGE_POINTER = 0x0016;
|
||||||
constexpr uint16_t FX_SAVE_VECTOR_KEY_POINTER = 0x0018; /* reserved interrupt vector 6 area */
|
constexpr uint16_t FX_SAVE_VECTOR_KEY_POINTER = 0x0018; /* reserved interrupt vector 6 area */
|
||||||
constexpr uint16_t FX_SAVE_VECTOR_PAGE_POINTER = 0x001A;
|
constexpr uint16_t FX_SAVE_VECTOR_PAGE_POINTER = 0x001A;
|
||||||
|
|
||||||
//Serial Flash Commands
|
// Serial Flash Commands
|
||||||
constexpr uint8_t SFC_JEDEC_ID = 0x9F;
|
constexpr uint8_t SFC_JEDEC_ID = 0x9F;
|
||||||
constexpr uint8_t SFC_READSTATUS1 = 0x05;
|
constexpr uint8_t SFC_READSTATUS1 = 0x05;
|
||||||
constexpr uint8_t SFC_READSTATUS2 = 0x35;
|
constexpr uint8_t SFC_READSTATUS2 = 0x35;
|
||||||
constexpr uint8_t SFC_READSTATUS3 = 0x15;
|
constexpr uint8_t SFC_READSTATUS3 = 0x15;
|
||||||
|
@ -31,7 +31,7 @@ constexpr uint8_t SFC_ERASE = 0x20;
|
||||||
constexpr uint8_t SFC_RELEASE_POWERDOWN = 0xAB;
|
constexpr uint8_t SFC_RELEASE_POWERDOWN = 0xAB;
|
||||||
constexpr uint8_t SFC_POWERDOWN = 0xB9;
|
constexpr uint8_t SFC_POWERDOWN = 0xB9;
|
||||||
|
|
||||||
//drawbitmap bit flags (used by modes below and internally)
|
// drawbitmap bit flags (used by modes below and internally)
|
||||||
constexpr uint8_t dbfWhiteBlack = 0; // bitmap is used as mask
|
constexpr uint8_t dbfWhiteBlack = 0; // bitmap is used as mask
|
||||||
constexpr uint8_t dbfInvert = 1; // bitmap is exclusive or-ed with display
|
constexpr uint8_t dbfInvert = 1; // bitmap is exclusive or-ed with display
|
||||||
constexpr uint8_t dbfBlack = 2; // bitmap will be blackened
|
constexpr uint8_t dbfBlack = 2; // bitmap will be blackened
|
||||||
|
@ -39,7 +39,7 @@ constexpr uint8_t dbfReverseBlack = 3; // reverses bitmap data
|
||||||
constexpr uint8_t dbfMasked = 4; // bitmap contains mask data
|
constexpr uint8_t dbfMasked = 4; // bitmap contains mask data
|
||||||
constexpr uint8_t dbfExtraRow = 7; // ignored (internal use)
|
constexpr uint8_t dbfExtraRow = 7; // ignored (internal use)
|
||||||
|
|
||||||
//drawBitmap modes with same behaviour as Arduboy library drawBitmap modes
|
// drawBitmap modes with same behaviour as Arduboy library drawBitmap modes
|
||||||
constexpr uint8_t dbmBlack = _BV(dbfReverseBlack) | // white pixels in bitmap will be drawn as black pixels on display
|
constexpr uint8_t dbmBlack = _BV(dbfReverseBlack) | // white pixels in bitmap will be drawn as black pixels on display
|
||||||
_BV(dbfBlack) | // black pixels in bitmap will not change pixels on display
|
_BV(dbfBlack) | // black pixels in bitmap will not change pixels on display
|
||||||
_BV(dbfWhiteBlack); // (same as sprites drawErase)
|
_BV(dbfWhiteBlack); // (same as sprites drawErase)
|
||||||
|
@ -51,7 +51,7 @@ constexpr uint8_t dbmWhite = _BV(dbfWhiteBlack); // white pixels in bitma
|
||||||
constexpr uint8_t dbmInvert = _BV(dbfInvert); // when a pixel in bitmap has a different color than on display the
|
constexpr uint8_t dbmInvert = _BV(dbfInvert); // when a pixel in bitmap has a different color than on display the
|
||||||
// pixel on display will be drawn as white. In all other cases the
|
// pixel on display will be drawn as white. In all other cases the
|
||||||
// pixel will be drawn as black
|
// pixel will be drawn as black
|
||||||
//additional drawBitmap modes
|
// additional drawBitmap modes
|
||||||
constexpr uint8_t dbmNormal = 0; // White pixels in bitmap will be drawn as white pixels on display
|
constexpr uint8_t dbmNormal = 0; // White pixels in bitmap will be drawn as white pixels on display
|
||||||
constexpr uint8_t dbmOverwrite = 0; // Black pixels in bitmap will be drawn as black pixels on display
|
constexpr uint8_t dbmOverwrite = 0; // Black pixels in bitmap will be drawn as black pixels on display
|
||||||
// (Same as sprites drawOverwrite)
|
// (Same as sprites drawOverwrite)
|
||||||
|
@ -60,7 +60,7 @@ constexpr uint8_t dbmReverse = _BV(dbfReverseBlack); // White pixels in bitma
|
||||||
// Black pixels in bitmap will be drawn as white pixels on display
|
// Black pixels in bitmap will be drawn as white pixels on display
|
||||||
|
|
||||||
constexpr uint8_t dbmMasked = _BV(dbfMasked); // The bitmap contains a mask that will determine which pixels are
|
constexpr uint8_t dbmMasked = _BV(dbfMasked); // The bitmap contains a mask that will determine which pixels are
|
||||||
// drawn and which will remain
|
// drawn and which pixels remain unchanged on display
|
||||||
// (same as sprites drawPlusMask)
|
// (same as sprites drawPlusMask)
|
||||||
|
|
||||||
// Note above modes may be combined like (dbmMasked | dbmReverse)
|
// Note above modes may be combined like (dbmMasked | dbmReverse)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/MLXXXp/ArduboyTones.git"
|
"url": "https://github.com/MLXXXp/ArduboyTones.git"
|
||||||
},
|
},
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"exclude": "extras",
|
"exclude": "extras",
|
||||||
"frameworks": "arduino",
|
"frameworks": "arduino",
|
||||||
"platforms": "atmelavr"
|
"platforms": "atmelavr"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name=ArduboyTones
|
name=ArduboyTones
|
||||||
version=1.0.3
|
version=1.0.4
|
||||||
author=Scott Allen
|
author=Scott Allen
|
||||||
maintainer=Scott Allen <saydisp-git@yahoo.ca>
|
maintainer=Scott Allen <saydisp-git@yahoo.ca>
|
||||||
sentence=A library for playing a sequence of tones, intended for use with the Arduboy game system.
|
sentence=A library for playing a sequence of tones, intended for use with the Arduboy game system.
|
||||||
|
|
|
@ -268,17 +268,18 @@ uint16_t ArduboyTones::getNext()
|
||||||
|
|
||||||
ISR(TIMER3_COMPA_vect)
|
ISR(TIMER3_COMPA_vect)
|
||||||
{
|
{
|
||||||
if (durationToggleCount != 0) {
|
long toggleCount = durationToggleCount;
|
||||||
|
if (toggleCount != 0) {
|
||||||
if (!toneSilent) {
|
if (!toneSilent) {
|
||||||
*(&TONE_PIN_PORT) ^= TONE_PIN_MASK; // toggle the pin
|
bitSet(*(&TONE_PIN_PIN), TONE_PIN); // toggle the pin
|
||||||
#ifdef TONES_VOLUME_CONTROL
|
#ifdef TONES_VOLUME_CONTROL
|
||||||
if (toneHighVol) {
|
if (toneHighVol) {
|
||||||
*(&TONE_PIN2_PORT) ^= TONE_PIN2_MASK; // toggle pin 2
|
bitSet(*(&TONE_PIN2_PIN), TONE_PIN2); // toggle pin 2
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (durationToggleCount > 0) {
|
if (--toggleCount >= 0) {
|
||||||
durationToggleCount--;
|
durationToggleCount = toggleCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -121,17 +121,20 @@ THE SOFTWARE.
|
||||||
|
|
||||||
#ifndef AB_DEVKIT
|
#ifndef AB_DEVKIT
|
||||||
// Arduboy speaker pin 1 = Arduino pin 5 = ATmega32u4 PC6
|
// Arduboy speaker pin 1 = Arduino pin 5 = ATmega32u4 PC6
|
||||||
|
#define TONE_PIN_PIN PINC
|
||||||
#define TONE_PIN_PORT PORTC
|
#define TONE_PIN_PORT PORTC
|
||||||
#define TONE_PIN_DDR DDRC
|
#define TONE_PIN_DDR DDRC
|
||||||
#define TONE_PIN PORTC6
|
#define TONE_PIN PORTC6
|
||||||
#define TONE_PIN_MASK _BV(TONE_PIN)
|
#define TONE_PIN_MASK _BV(TONE_PIN)
|
||||||
#ifndef AB_ALTERNATE_WIRING
|
#ifndef AB_ALTERNATE_WIRING
|
||||||
// Arduboy speaker pin 2 = Arduino pin 13 = ATmega32u4 PC7
|
// Arduboy speaker pin 2 = Arduino pin 13 = ATmega32u4 PC7
|
||||||
|
#define TONE_PIN2_PIN PINC
|
||||||
#define TONE_PIN2_PORT PORTC
|
#define TONE_PIN2_PORT PORTC
|
||||||
#define TONE_PIN2_DDR DDRC
|
#define TONE_PIN2_DDR DDRC
|
||||||
#define TONE_PIN2 PORTC7
|
#define TONE_PIN2 PORTC7
|
||||||
#else
|
#else
|
||||||
// Arduboy speaker pin 2 = Pro Micro pin 6 = ATmega32u4 PD7
|
// Arduboy speaker pin 2 = Pro Micro pin 6 = ATmega32u4 PD7
|
||||||
|
#define TONE_PIN2_PIN PIND
|
||||||
#define TONE_PIN2_PORT PORTD
|
#define TONE_PIN2_PORT PORTD
|
||||||
#define TONE_PIN2_DDR DDRD
|
#define TONE_PIN2_DDR DDRD
|
||||||
#define TONE_PIN2 PORTD7
|
#define TONE_PIN2 PORTD7
|
||||||
|
|
Loading…
Reference in New Issue