Update Arduboy FX library and examples
Update FX::begin() Now includes FX:disableOLED() Added FX::display() FX replacement for arduboy.display()
This commit is contained in:
parent
db243c954c
commit
d711506e3d
|
@ -0,0 +1,179 @@
|
|||
/* *****************************************************************************
|
||||
* FX draw balls test v1.16 by Mr.Blinky May 2019 Feb 2022 licenced under CC0
|
||||
* *****************************************************************************
|
||||
*
|
||||
* Before this example sketch is uploaded and run on the Arduboy FX, make sure
|
||||
* the fxdata this sketch has been build and uploaded to the Arduboy FX.
|
||||
*
|
||||
* If the Arduboy FX Arduino plugin has been installed you can simply choose the
|
||||
* 'Build and upload Arduboy FX data' from the Arduino IDE Tools menu.
|
||||
*
|
||||
* Alternatively the fxdata.txt script file can be build using the fxdata-build.py
|
||||
* Phyton script and the fxdata.bin file can be uploaded using the uploader-gui.py,
|
||||
* fxdata-upload.py or flash-writer.py Python script using the -d switch.
|
||||
*
|
||||
* This demo draws a moving background tilemap with a bunch of bouncing ball sprites.
|
||||
*
|
||||
* Button controls:
|
||||
*
|
||||
* A - increase the number of bounching balls up to MAX_BALLS
|
||||
* B - decrease the number of balls down to zero
|
||||
*
|
||||
* D-Pad - scroll the background
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Arduboy2.h>
|
||||
#include <ArduboyFX.h> // Required library for accessing the FX flash chip
|
||||
#include "fxdata.h" // this file contains all the references to FX data
|
||||
// Check out fxdata.txt to see how this is done.
|
||||
#define FRAME_RATE 60
|
||||
|
||||
#define MAX_BALLS 55 // 55 Balls possible at 60fps 155 at 30fps
|
||||
#define CIRCLE_POINTS 84
|
||||
#define VISABLE_TILES_PER_COLUMN 5 // the maximum number of tiles visable vertically
|
||||
#define VISABLE_TILES_PER_ROW 9 // the maximum number of tiles visable horizontally
|
||||
|
||||
//datafile offsets
|
||||
constexpr uint8_t ballWidth = 16;
|
||||
constexpr uint8_t ballHeight = 16;
|
||||
constexpr uint8_t tilemapWidth = 16; // number of tiles in a tilemap row
|
||||
constexpr uint8_t tileWidth = 16;
|
||||
constexpr uint8_t tileHeight = 16;
|
||||
|
||||
Arduboy2 arduboy;
|
||||
|
||||
Point circlePoints[CIRCLE_POINTS] = // all the points of a circle with radius 15 used for the circling background effect
|
||||
{
|
||||
{-15,0}, {-15,1}, {-15,2}, {-15,3}, {-15,4}, {-14,5}, {-14,6}, {-13,7}, {-13,8}, {-12,9}, {-11,10}, {-10,11}, {-9,12}, {-8,13}, {-7,13}, {-6,14},
|
||||
{-5,14}, {-4,14}, {-3,15}, {-2,15}, {-1,15}, {0,15}, {1,15}, {2,15}, {3,15}, {4,14}, {5,14}, {6,14}, {7,13}, {8,13}, {9,12}, {10,11},
|
||||
{11,10}, {12,9}, {12,8}, {13,7}, {13,6}, {14,5}, {14,4}, {14,3}, {14,2}, {14,1}, {15,0}, {15,-1}, {15,-2}, {15,-3}, {15,-4}, {14,-5},
|
||||
{14,-6}, {13,-7}, {13,-8}, {12,-9}, {11,-10}, {10,-11}, {9,-12}, {8,-13}, {7,-13}, {6,-14}, {5,-14}, {4,-14}, {3,-15}, {2,-15}, {1,-15}, {0,-15},
|
||||
{-1,-15}, {-2,-15}, {-3,-15}, {-4,-14}, {-5,-14}, {-6,-14}, {-7,-13}, {-8,-13}, {-9,-12}, {-10,-11}, {-11,-10}, {-12,-9}, {-12,-8}, {-13,-7}, {-13,-6}, {-14,-5},
|
||||
{-14,-4}, {-14,-3}, {-14,-2}, {-14,-1}
|
||||
};
|
||||
|
||||
Point camera;
|
||||
Point mapLocation = {16,16};
|
||||
|
||||
struct Ball
|
||||
{
|
||||
int8_t x;
|
||||
int8_t y;
|
||||
int8_t xspeed;
|
||||
int8_t yspeed;
|
||||
};
|
||||
|
||||
Ball ball[MAX_BALLS];
|
||||
uint8_t ballsVisible = MAX_BALLS;
|
||||
|
||||
uint8_t pos;
|
||||
|
||||
void setup() {
|
||||
arduboy.begin();
|
||||
arduboy.setFrameRate(FRAME_RATE);
|
||||
FX::begin(FX_DATA_PAGE); // wakeup external flash chip, initialize datapage, detect presence of external flash chip
|
||||
|
||||
for (uint8_t i=0; i < MAX_BALLS; i++) // initialize ball sprites
|
||||
{
|
||||
ball[i].x = random(113);
|
||||
ball[i].y = random(49);
|
||||
ball[i].xspeed = 1;//random(1,3);
|
||||
if (random(100) > 49) ball[i].xspeed = -ball[i].xspeed;
|
||||
ball[i].yspeed = 1; //random(1,3);
|
||||
if (random(100) > 49) ball[i].yspeed = -ball[i].yspeed;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t tilemapBuffer[VISABLE_TILES_PER_ROW]; // a small buffer to store one horizontal row of tiles from the tilemap
|
||||
|
||||
void loop() {
|
||||
if (!arduboy.nextFrame()) return; // return until it's time to draw a new frame
|
||||
|
||||
arduboy.pollButtons(); // pollButtons required for the justPressed() function
|
||||
if ((arduboy.justPressed(A_BUTTON) && ballsVisible < MAX_BALLS)) ballsVisible++; // Pressing A button increases the number of visible balls until the maximum has been reached
|
||||
if ((arduboy.justPressed(B_BUTTON) && ballsVisible > 0)) ballsVisible--; // Pressing B reduces the number of visible balls until none are visible
|
||||
if (arduboy.pressed(UP_BUTTON) && mapLocation.y > 16) mapLocation.y--; // Pressing directional buttons will scroll the tilemap
|
||||
if (arduboy.pressed(DOWN_BUTTON) && mapLocation.y < 176) mapLocation.y++;
|
||||
if (arduboy.pressed(LEFT_BUTTON) && mapLocation.x > 16) mapLocation.x--;
|
||||
if (arduboy.pressed(RIGHT_BUTTON) && mapLocation.x < 112) mapLocation.x++;
|
||||
|
||||
camera.x = mapLocation.x + circlePoints[pos].x; // circle around a fixed point
|
||||
camera.y = mapLocation.y + circlePoints[pos].y;
|
||||
|
||||
//draw tilemap
|
||||
for (int8_t y = 0; y < VISABLE_TILES_PER_COLUMN; y++)
|
||||
{
|
||||
FX::readDataArray(FX_DATA_TILEMAP, // read the visible tiles on a horizontal row from the tilemap in external flash
|
||||
y + camera.y / tileHeight, // the tilemap row
|
||||
camera.x / tileWidth, // the column within tilemap row
|
||||
tilemapWidth, // use the width of tilemap as array element size
|
||||
tilemapBuffer, // reading tiles into a small buffer is faster then reading each tile individually
|
||||
VISABLE_TILES_PER_ROW);
|
||||
|
||||
for (uint8_t x = 0; x < VISABLE_TILES_PER_ROW; x++)
|
||||
{
|
||||
FX::drawBitmap(x * tileWidth - camera.x % tileWidth, // we're substracting the tile width and height modulus for scrolling effect
|
||||
y * tileHeight - camera.y % tileHeight, //
|
||||
FX_DATA_TILES, // the tilesheet bitmap offset in external flash
|
||||
tilemapBuffer[x], // tile index
|
||||
dbmNormal); // draw a row of normal tiles
|
||||
}
|
||||
}
|
||||
if (arduboy.notPressed(UP_BUTTON | DOWN_BUTTON | LEFT_BUTTON | RIGHT_BUTTON)) pos = ++pos % CIRCLE_POINTS; //only circle around when no directional buttons are pressed
|
||||
|
||||
//draw balls
|
||||
for (uint8_t i=0; i < ballsVisible; i++)
|
||||
FX::drawBitmap(ball[i].x, // although this function is called drawBitmap it can also draw masked sprites
|
||||
ball[i].y,
|
||||
FX_DATA_BALLS, // the ball sprites masked bitmap offset in external flash memory
|
||||
0, // the fxdata was build using the single ball sprite.png image so there's only frame 0
|
||||
//i % 16, // comment above and uncomment this one if the fxdata is rebuild using the ball_16x16.png image
|
||||
dbmMasked /* | dbmReverse */ ); // remove the '/*' and '/*' to reverse the balls into white balls
|
||||
|
||||
//when uploading the drawballs-singe-datafile.bin into the development area,
|
||||
//you can replace the "0" value in the drawBitmap function above with "i % 16" without the quotes to display 16 different balls
|
||||
|
||||
//update ball movements
|
||||
for (uint8_t i=0; i < ballsVisible; i++)
|
||||
{
|
||||
if (ball[i].xspeed > 0) // Moving right
|
||||
{
|
||||
ball[i].x += ball[i].xspeed;
|
||||
if (ball[i].x > WIDTH - ballWidth) //off the right
|
||||
{
|
||||
ball[i].x = WIDTH - ballWidth;
|
||||
ball[i].xspeed = - ball[i].xspeed;
|
||||
}
|
||||
}
|
||||
else // moving left
|
||||
{
|
||||
ball[i].x += ball[i].xspeed;
|
||||
if (ball[i].x < 0) // off the left
|
||||
{
|
||||
ball[i].x = 0;
|
||||
ball[i].xspeed = - ball[i].xspeed;
|
||||
}
|
||||
}
|
||||
if (ball[i].yspeed > 0) // moving down
|
||||
{
|
||||
ball[i].y += ball[i].yspeed;
|
||||
if (ball[i].y > HEIGHT - tileHeight) // off the bottom
|
||||
{
|
||||
ball[i].y = HEIGHT - tileHeight;
|
||||
ball[i].yspeed = - ball[i].yspeed;
|
||||
}
|
||||
}
|
||||
else // moving up
|
||||
{
|
||||
ball[i].y += ball[i].yspeed;
|
||||
if (ball[i].y < 0) // off the top
|
||||
{
|
||||
ball[i].y = 0;
|
||||
ball[i].yspeed = - ball[i].yspeed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FX::display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
}
|
|
@ -1,21 +1,25 @@
|
|||
/* *****************************************************************************
|
||||
* FX basic example v1.0 by Mr.Blinky May 2021 licenced under CC0
|
||||
* FX basic example v1.02 by Mr.Blinky May 2021 - Feb 2022 licenced under CC0
|
||||
* *****************************************************************************
|
||||
*
|
||||
* This is a basic example that shows how you can draw a image from FX external
|
||||
* flash memory. It will draw the Arduboy FX logo and move it around the screen.
|
||||
*
|
||||
* This test depend on the file fxdata.bin being uploaded to the external FX flash
|
||||
* chip using the uploader-gui.py or flash-writer.py Python script in the
|
||||
* development area. When using the flash writer script. Use the following command:
|
||||
* Before this example sketch is uploaded and run on the Arduboy FX, make sure
|
||||
* the fxdata this sketch has been build and uploaded to the Arduboy FX.
|
||||
*
|
||||
* python flash-writer.py -d fxdata.bin
|
||||
* If the Arduboy FX Arduino plugin has been installed you can simply choose the
|
||||
* 'Build and upload Arduboy FX data' from the Arduino IDE Tools menu.
|
||||
*
|
||||
* Alternatively the fxdata.txt script file can be build using the fxdata-build.py
|
||||
* Phyton script and the fxdata.bin file can be uploaded using the uploader-gui.py,
|
||||
* fxdata-upload.py or flash-writer.py Python script using the -d switch.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#include <Arduboy2.h> // required to build for Arduboy
|
||||
#include <ArduboyFX.h> // required to access the FX external flash
|
||||
#include "fxdata.h" // this file contains all references to FX data
|
||||
#include "fxdata/fxdata.h" // this file contains all references to FX data
|
||||
|
||||
//constant values
|
||||
constexpr uint8_t FXlogoWidth = 115;
|
||||
|
@ -32,8 +36,7 @@ int8_t yDir = 1;
|
|||
void setup() {
|
||||
arduboy.begin(); // normal initialisation with Arduboy startup logo
|
||||
//arduboy.setFrameRate(60); // Only needed when frameRate != 60
|
||||
FX::disableOLED(); // OLED must be disabled before external flash is accessed. OLED display should only be enabled prior updating the display.
|
||||
FX::begin(FX_DATA_PAGE); // external flash chip may be in power down mode so wake it up (Cathy bootloader puts chip into powerdown mode)
|
||||
FX::begin(FX_DATA_PAGE); // initialise FX chip
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
@ -46,7 +49,5 @@ void loop() {
|
|||
if (x == 0 || x == WIDTH - FXlogoWidth) xDir = -xDir;
|
||||
if (y == 0 || y == HEIGHT - FXlogoHeight) yDir = -yDir;
|
||||
|
||||
FX::enableOLED(); // only enable OLED for updating the display
|
||||
arduboy.display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
FX::disableOLED(); // disable display again so external flash can be accessed at any time
|
||||
FX::display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
/**** FX data header generated by fx-data.py tool version 1.00 ****/
|
||||
/**** FX data header generated by fxdata-build.py tool version 1.01 ****/
|
||||
|
||||
using uint24_t = __uint24;
|
||||
|
|
@ -62,4 +62,4 @@
|
|||
|
||||
// Arduboy FX logo image:
|
||||
|
||||
image_t FXlogo = "assets/FXlogo.png"
|
||||
image_t FXlogo = "../assets/FXlogo.png"
|
|
@ -1,15 +1,19 @@
|
|||
/* *****************************************************************************
|
||||
* FX drawBitmap test v1.3 by Mr.Blinky Apr 2019-May 2021 licenced under CC0
|
||||
* FX drawBitmap test v1.31 by Mr.Blinky Apr 2019-Feb 2022 licenced under CC0
|
||||
* *****************************************************************************
|
||||
*
|
||||
* The map and whale images used in this example were made by 2bitcrook and are
|
||||
* licenced under CC-BY-NC-SA licence.
|
||||
|
||||
* This test depend on the file fxdata.bin being uploaded to the external FX flash
|
||||
* chip using the uploader-gui.py or flash-writer.py Python script in the
|
||||
* development area. When using the flash writer script. Use the following command:
|
||||
* Before this example sketch is uploaded and run on the Arduboy FX, make sure
|
||||
* the fxdata this sketch has been build and uploaded to the Arduboy FX.
|
||||
*
|
||||
* python flash-writer.py -d fxdata.bin
|
||||
* If the Arduboy FX Arduino plugin has been installed you can simply choose the
|
||||
* 'Build and upload Arduboy FX data' from the Arduino IDE Tools menu.
|
||||
*
|
||||
* Alternatively the fxdata.txt script file can be build using the fxdata-build.py
|
||||
* Phyton script and the fxdata.bin file can be uploaded using the uploader-gui.py,
|
||||
* fxdata-upload.py or flash-writer.py Python script using the -d switch.
|
||||
*
|
||||
* This example uses a 816 by 368 pixel image as background and a
|
||||
* 107 x 69 image for masked sprite. Both can be moved around using the button combos
|
||||
|
@ -26,7 +30,7 @@
|
|||
|
||||
#include <Arduboy2.h> // required to build for Arduboy
|
||||
#include <ArduboyFX.h> // required to access the FX external flash
|
||||
#include "fxdata.h" // this file contains all references to FX data
|
||||
#include "fxdata/fxdata.h" // this file contains all references to FX data
|
||||
|
||||
#define FRAME_RATE 120
|
||||
|
||||
|
@ -39,8 +43,7 @@ int y [2];
|
|||
void setup() {
|
||||
arduboy.begin();
|
||||
arduboy.setFrameRate(FRAME_RATE);
|
||||
FX::disableOLED(); // OLED must be disabled before external flash is accessed. OLED display should only be enabled prior updating the display.
|
||||
FX::begin(FX_DATA_PAGE); //external flash chip may be in power down mode so wake it up (Cathy bootloader puts chip into powerdown mode)
|
||||
FX::begin(FX_DATA_PAGE); // initialise FX chip
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
@ -79,7 +82,5 @@ void loop() {
|
|||
arduboy.setCursor(0,8);
|
||||
arduboy.print(y[select]);
|
||||
}
|
||||
FX::enableOLED(); // only enable OLED for updating the display
|
||||
arduboy.display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
FX::disableOLED(); // disable display again so external flash can be accessed at any time
|
||||
FX::display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
/**** FX data header generated by fx-data.py tool version 1.00 ****/
|
||||
/**** FX data header generated by fxdata-build.py tool version 1.01 ****/
|
||||
|
||||
using uint24_t = __uint24;
|
||||
|
|
@ -62,8 +62,8 @@
|
|||
|
||||
// A large map background image:
|
||||
|
||||
image_t map = "assets/map.png"
|
||||
image_t mapGfx = "../assets/map.png"
|
||||
|
||||
// chompies masked sprite image:
|
||||
|
||||
image_t whale = "assets/whale.png"
|
||||
image_t whaleGfx = "../assets/whale.png"
|
Binary file not shown.
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 252 B |
|
@ -1,12 +1,16 @@
|
|||
/* *****************************************************************************
|
||||
* FX draw balls test v1.15 by Mr.Blinky May 2019 May2021 licenced under CC0
|
||||
* FX draw balls test v1.16 by Mr.Blinky May 2019 Feb 2022 licenced under CC0
|
||||
* *****************************************************************************
|
||||
*
|
||||
* This test depend on the file fxdata.bin being uploaded to the external FX flash
|
||||
* chip using the uploader-gui.py or flash-writer.py Python script in the
|
||||
* development area. When using the flash writer script. Use the following command:
|
||||
* Before this example sketch is uploaded and run on the Arduboy FX, make sure
|
||||
* the fxdata this sketch has been build and uploaded to the Arduboy FX.
|
||||
*
|
||||
* python flash-writer.py -d fxdata.bin
|
||||
* If the Arduboy FX Arduino plugin has been installed you can simply choose the
|
||||
* 'Build and upload Arduboy FX data' from the Arduino IDE Tools menu.
|
||||
*
|
||||
* Alternatively the fxdata.txt script file can be build using the fxdata-build.py
|
||||
* Phyton script and the fxdata.bin file can be uploaded using the uploader-gui.py,
|
||||
* fxdata-upload.py or flash-writer.py Python script using the -d switch.
|
||||
*
|
||||
* This demo draws a moving background tilemap with a bunch of bouncing ball sprites around
|
||||
*
|
||||
|
@ -21,7 +25,7 @@
|
|||
|
||||
#include <Arduboy2.h>
|
||||
#include <ArduboyFX.h> // Required library for accessing the FX flash chip
|
||||
#include "fxdata.h" // this file contains all the references to FX data
|
||||
#include "fxdata/fxdata.h" // this file contains all the references to FX data
|
||||
// Check out fxdata.txt to see how this is done.
|
||||
#define FRAME_RATE 60
|
||||
|
||||
|
@ -68,8 +72,7 @@ uint8_t pos;
|
|||
void setup() {
|
||||
arduboy.begin();
|
||||
arduboy.setFrameRate(FRAME_RATE);
|
||||
FX::disableOLED(); // OLED must be disabled before cart can be used. OLED display should only be enabled prior updating the display.
|
||||
FX::begin(FX_DATA_PAGE); // wakeup external flash chip, initialize datapage, detect presence of external flash chip
|
||||
FX::begin(FX_DATA_PAGE); // // initialise FX chip
|
||||
|
||||
for (uint8_t i=0; i < MAX_BALLS; i++) // initialize ball sprites
|
||||
{
|
||||
|
@ -172,7 +175,5 @@ void loop() {
|
|||
}
|
||||
}
|
||||
|
||||
FX::enableOLED();// only enable OLED for updating the display
|
||||
arduboy.display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
FX::disableOLED();// disable display again so external flash can be accessed at any time
|
||||
FX::display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
/**** FX data header generated by fx-data.py tool version 1.00 ****/
|
||||
/**** FX data header generated by fxdata-build.py tool version 1.01 ****/
|
||||
|
||||
using uint24_t = __uint24;
|
||||
|
|
@ -62,7 +62,7 @@
|
|||
|
||||
// Background tiles graphics
|
||||
|
||||
image_t FX_DATA_TILES = "assets/tiles_16x16.png"
|
||||
image_t FX_DATA_TILES = "../assets/tiles_16x16.png"
|
||||
|
||||
// 16 x 16 tilemap
|
||||
|
||||
|
@ -93,5 +93,5 @@ uint8_t FX_DATA_TILEMAP[] = {
|
|||
|
||||
// masked ball sprite graphics
|
||||
|
||||
image_t FX_DATA_BALLS = "assets/ball.png"
|
||||
//image_t FX_DATA_BALLS = "assets/ball_16x16.png"
|
||||
image_t FX_DATA_BALLS = "../assets//ball.png"
|
||||
//image_t FX_DATA_BALLS = "../assets/ball_16x16.png"
|
|
@ -1,5 +1,5 @@
|
|||
name=ArduboyFX
|
||||
version=1.0.0
|
||||
version=1.0.1
|
||||
author=Mr.Blinky
|
||||
maintainer=mstr.blinky@gmail.com
|
||||
sentence=The Arduboy FX library.
|
||||
|
|
|
@ -20,12 +20,14 @@ uint8_t FX::readByte()
|
|||
|
||||
void FX::begin()
|
||||
{
|
||||
disableOLED();
|
||||
wakeUp();
|
||||
}
|
||||
|
||||
|
||||
void FX::begin(uint16_t developmentDataPage)
|
||||
{
|
||||
disableOLED();
|
||||
if (pgm_read_word(FX_DATA_VECTOR_KEY_POINTER) == FX_VECTOR_KEY_VALUE)
|
||||
{
|
||||
programDataPage = (pgm_read_byte(FX_DATA_VECTOR_PAGE_POINTER) << 8) | pgm_read_byte(FX_DATA_VECTOR_PAGE_POINTER + 1);
|
||||
|
@ -40,6 +42,7 @@ void FX::begin(uint16_t developmentDataPage)
|
|||
|
||||
void FX::begin(uint16_t developmentDataPage, uint16_t developmentSavePage)
|
||||
{
|
||||
disableOLED();
|
||||
if (pgm_read_word(FX_DATA_VECTOR_KEY_POINTER) == FX_VECTOR_KEY_VALUE)
|
||||
{
|
||||
programDataPage = (pgm_read_byte(FX_DATA_VECTOR_PAGE_POINTER) << 8) | pgm_read_byte(FX_DATA_VECTOR_PAGE_POINTER + 1);
|
||||
|
@ -700,7 +703,7 @@ void FX::displayPrefetch(uint24_t address, uint8_t* target, uint16_t len, bool c
|
|||
{
|
||||
seekData(address);
|
||||
asm volatile
|
||||
( "dbg:\n"
|
||||
(
|
||||
" ldi r30, lo8(%[sbuf]) \n" // uint8_t* ptr = Arduboy2::sBuffer;
|
||||
" ldi r31, hi8(%[sbuf]) \n"
|
||||
" ldi r25, hi8(%[end]) \n"
|
||||
|
@ -742,3 +745,17 @@ void FX::displayPrefetch(uint24_t address, uint8_t* target, uint16_t len, bool c
|
|||
disable();
|
||||
SPSR;
|
||||
}
|
||||
|
||||
void FX::display()
|
||||
{
|
||||
enableOLED();
|
||||
Arduboy2Base::display();
|
||||
disableOLED();
|
||||
}
|
||||
|
||||
void FX::display(bool clear)
|
||||
{
|
||||
enableOLED();
|
||||
Arduboy2Base::display(clear);
|
||||
disableOLED();
|
||||
}
|
||||
|
|
|
@ -127,6 +127,10 @@ class FX
|
|||
|
||||
static void displayPrefetch(uint24_t address, uint8_t* target, uint16_t len, bool clear);
|
||||
|
||||
static void display(); // display screen buffer
|
||||
|
||||
static void display(bool clear); // display screen buffer with clear
|
||||
|
||||
static void begin(); // Initializes flash memory. Use only when program does not require data and save areas in flash memory
|
||||
|
||||
static void begin(uint16_t programDataPage); // Initializes flash memory. Use when program depends on data in flash memory
|
||||
|
|
Loading…
Reference in New Issue