From e73457dc7510a8fae665515bc0db4ac003ab2454 Mon Sep 17 00:00:00 2001 From: "Mr.Blinky" Date: Sat, 11 Jun 2022 19:09:48 +0200 Subject: [PATCH] Update Arduboy2 library, boards.txt boards.txt add seperate Arduboy and Arduboy FX board support Arduboy2.cpp, Arduboy2.h change use of avr eeprom library instead of Arduino eeprom library. Arduboy2core.cpp fix SH1106 display code end timing --- board-package-source/boards.txt | 168 +++++++++++++++++- .../libraries/Arduboy2/src/Arduboy2.cpp | 36 ++-- .../libraries/Arduboy2/src/Arduboy2.h | 2 +- .../libraries/Arduboy2/src/Arduboy2Core.cpp | 1 + 4 files changed, 185 insertions(+), 22 deletions(-) diff --git a/board-package-source/boards.txt b/board-package-source/boards.txt index 096eea0..8c8041b 100644 --- a/board-package-source/boards.txt +++ b/board-package-source/boards.txt @@ -269,11 +269,173 @@ arduboy-homemade.menu.contrast.lowest.build.contrast=-DOLED_CONTRAST=0x00 arduboy-homemade.menu.contrast.highest=Highest arduboy-homemade.menu.contrast.highest.build.contrast=-DOLED_CONTRAST=0xFF +################################################################################ +# Arduboy FX board +################################################################################ + +arduboy-fx.name=Arduboy FX + +#Arduino Leonardo +arduboy-fx.vid.0=0x2341 +arduboy-fx.pid.0=0x0036 +arduboy-fx.vid.1=0x2341 +arduboy-fx.pid.1=0x8036 +arduboy-fx.vid.2=0x2A03 +arduboy-fx.pid.2=0x0036 +arduboy-fx.vid.3=0x2A03 +arduboy-fx.pid.3=0x8036 +#Arduino Micro +arduboy-fx.vid.4=0x2341 +arduboy-fx.pid.4=0x0037 +arduboy-fx.vid.5=0x2341 +arduboy-fx.pid.5=0x8037 +arduboy-fx.vid.6=0x2A03 +arduboy-fx.pid.6=0x0037 +arduboy-fx.vid.7=0x2A03 +arduboy-fx.pid.7=0x8037 +#Genuino Micro +arduboy-fx.vid.8=0x2341 +arduboy-fx.pid.8=0x8237 +#Sparkfun Pro Micro 5V +arduboy-fx.vid.8=0x1b4f +arduboy-fx.pid.8=0x9205 +arduboy-fx.vid.9=0x1b4f +arduboy-fx.pid.9=0x9206 + +arduboy-fx.upload.tool=arduino:avrdude +arduboy-fx.upload.protocol=avr109 +arduboy-fx.upload.maximum_size=28672 +arduboy-fx.upload.maximum_data_size=2560 +arduboy-fx.upload.speed=57600 +arduboy-fx.upload.disable_flushing=true +arduboy-fx.upload.use_1200bps_touch=true +arduboy-fx.upload.wait_for_upload_port=true + +arduboy-fx.bootloader.tool=arduino:avrdude +arduboy-fx.bootloader.low_fuses=0xff +arduboy-fx.bootloader.high_fuses=0xd2 +arduboy-fx.bootloader.extended_fuses=0xcb +arduboy-fx.bootloader.file=cathy3k/arduboy3k-bootloader-menu-sda.hex +arduboy-fx.bootloader.unlock_bits=0x3F +arduboy-fx.bootloader.lock_bits=0x2F + +arduboy-fx.build.mcu=atmega32u4 +arduboy-fx.build.f_cpu=16000000L +arduboy-fx.build.variant=arduboy +arduboy-fx.build.board=AVR_ARDUBOY +arduboy-fx.build.vid=0x2341 +arduboy-fx.build.pid=0x8036 +arduboy-fx.build.variant=arduboy +arduboy-fx.build.usb_product="Arduboy" +arduboy-fx.build.board=AVR_ARDUBOY +arduboy-fx.build.core=arduino:arduino +arduboy-fx.build.flash_cs=-DCART_CS_SDA +arduboy-fx.build.extra_flags=-DARDUBOY_10 {build.flash_cs} {build.usb_flags} + +# Arduboy FX menu options ###################################################### + +arduboy-fx.menu.core.arduboy-core=Arduboy optimized core +arduboy-fx.menu.core.arduboy-core.build.core=arduboy + +arduboy-fx.menu.core.arduino-core=Standard Arduino core +arduboy-fx.menu.core.arduino-core.build.core=arduino:arduino + +arduboy-fx.menu.boot.cathy3k=Cathy3K (starts with menu) +arduboy-fx.menu.boot.cathy3k.upload.maximum_size=29696 +arduboy-fx.menu.boot.cathy3k.bootloader.high_fuses=0xd2 +arduboy-fx.menu.boot.cathy3k.bootloader.file=cathy3k/arduboy3k-bootloader-menu-sda.hex + +arduboy-fx.menu.boot.cathy3kg=Cathy3K (starts with game) +arduboy-fx.menu.boot.cathy3kg.upload.maximum_size=29696 +arduboy-fx.menu.boot.cathy3kg.bootloader.high_fuses=0xd2 +arduboy-fx.menu.boot.cathy3kg.bootloader.file=cathy3k/arduboy3k-bootloader-game-sda.hex + +################################################################################ +# Arduboy FX DevKit board +################################################################################ + +arduboy-fx-devkit.name=Arduboy FX DevKit + +#Arduino Leonardo +arduboy-fx-devkit.vid.0=0x2341 +arduboy-fx-devkit.pid.0=0x0036 +arduboy-fx-devkit.vid.1=0x2341 +arduboy-fx-devkit.pid.1=0x8036 +arduboy-fx-devkit.vid.2=0x2A03 +arduboy-fx-devkit.pid.2=0x0036 +arduboy-fx-devkit.vid.3=0x2A03 +arduboy-fx-devkit.pid.3=0x8036 +#Arduino Micro +arduboy-fx-devkit.vid.4=0x2341 +arduboy-fx-devkit.pid.4=0x0037 +arduboy-fx-devkit.vid.5=0x2341 +arduboy-fx-devkit.pid.5=0x8037 +arduboy-fx-devkit.vid.6=0x2A03 +arduboy-fx-devkit.pid.6=0x0037 +arduboy-fx-devkit.vid.7=0x2A03 +arduboy-fx-devkit.pid.7=0x8037 +#Genuino Micro +arduboy-fx-devkit.vid.8=0x2341 +arduboy-fx-devkit.pid.8=0x8237 +#Sparkfun Pro Micro 5V +arduboy-fx-devkit.vid.8=0x1b4f +arduboy-fx-devkit.pid.8=0x9205 +arduboy-fx-devkit.vid.9=0x1b4f +arduboy-fx-devkit.pid.9=0x9206 + +arduboy-fx-devkit.upload.tool=arduino:avrdude +arduboy-fx-devkit.upload.protocol=avr109 +arduboy-fx-devkit.upload.maximum_size=28672 +arduboy-fx-devkit.upload.maximum_data_size=2560 +arduboy-fx-devkit.upload.speed=57600 +arduboy-fx-devkit.upload.disable_flushing=true +arduboy-fx-devkit.upload.use_1200bps_touch=true +arduboy-fx-devkit.upload.wait_for_upload_port=true + +arduboy-fx-devkit.bootloader.tool=arduino:avrdude +arduboy-fx-devkit.bootloader.low_fuses=0xff +arduboy-fx-devkit.bootloader.high_fuses=0xd2 +arduboy-fx-devkit.bootloader.extended_fuses=0xcb +arduboy-fx-devkit.bootloader.file=cathy3k/arduboy3k-bootloader-menu-sda.hex +arduboy-fx-devkit.bootloader.unlock_bits=0x3F +arduboy-fx-devkit.bootloader.lock_bits=0x2F + +arduboy-fx-devkit.build.mcu=atmega32u4 +arduboy-fx-devkit.build.f_cpu=16000000L +arduboy-fx-devkit.build.variant=arduboy +arduboy-fx-devkit.build.board=AVR_ARDUBOY +arduboy-fx-devkit.build.vid=0x2341 +arduboy-fx-devkit.build.pid=0x8036 +arduboy-fx-devkit.build.variant=arduboy +arduboy-fx-devkit.build.usb_product="Arduboy" +arduboy-fx-devkit.build.board=AVR_ARDUBOY +arduboy-fx-devkit.build.core=arduino:arduino +arduboy-fx-devkit.build.flash_cs=-DCART_CS_RX +arduboy-fx-devkit.build.extra_flags=-DARDUBOY_10 {build.flash_cs} {build.usb_flags} + +# Arduboy FX DevKit menu options ############################################### + +arduboy-fx-devkit.menu.core.arduboy-core=Arduboy optimized core +arduboy-fx-devkit.menu.core.arduboy-core.build.core=arduboy + +arduboy-fx-devkit.menu.core.arduino-core=Standard Arduino core +arduboy-fx-devkit.menu.core.arduino-core.build.core=arduino:arduino + +arduboy-fx-devkit.menu.boot.cathy3k=Cathy3K (starts with menu) +arduboy-fx-devkit.menu.boot.cathy3k.upload.maximum_size=29696 +arduboy-fx-devkit.menu.boot.cathy3k.bootloader.high_fuses=0xd2 +arduboy-fx-devkit.menu.boot.cathy3k.bootloader.file=cathy3k/arduboy3k-bootloader-menu-sda.hex + +arduboy-fx-devkit.menu.boot.cathy3kg=Cathy3K (starts with game) +arduboy-fx-devkit.menu.boot.cathy3kg.upload.maximum_size=29696 +arduboy-fx-devkit.menu.boot.cathy3kg.bootloader.high_fuses=0xd2 +arduboy-fx-devkit.menu.boot.cathy3kg.bootloader.file=cathy3k/arduboy3k-bootloader-game-sda.hex + ################################################################################ # Arduboy board ################################################################################ -arduboy.name=Arduboy (FX) +arduboy.name=Arduboy #Arduino Leonardo arduboy.vid.0=0x2341 @@ -484,7 +646,7 @@ arduboy-devkit.menu.boot.cathy3kg.bootloader.file=cathy3k/arduboy3k-bootloader-g 8bitcadexl.build.flash_cs=-DCART_CS_RX 8bitcadexl.build.extra_flags=-DARDUBOY_10 -DOLED_SSD1309 {build.flash_cs} {build.contrast} {build.usb_flags} -# Arduboy menu options ######################################################### +# 8BitCADE XL menu options ##################################################### #core select @@ -567,7 +729,7 @@ arduboy-devkit.menu.boot.cathy3kg.bootloader.file=cathy3k/arduboy3k-bootloader-g 8bitcadexlup.build.flash_cs=-DCART_CS_RX 8bitcadexlup.build.extra_flags=-DARDUBOY_10 -DOLED_SSD1309 -DSUPPORT_XY_BUTTONS {build.flash_cs} {build.contrast} {build.usb_flags} -# Arduboy menu options ######################################################### +# 8BitCADE XL Level UP menu options ############################################ #core select diff --git a/board-package-source/libraries/Arduboy2/src/Arduboy2.cpp b/board-package-source/libraries/Arduboy2/src/Arduboy2.cpp index d8d8501..5d6059c 100644 --- a/board-package-source/libraries/Arduboy2/src/Arduboy2.cpp +++ b/board-package-source/libraries/Arduboy2/src/Arduboy2.cpp @@ -101,7 +101,7 @@ void Arduboy2Base::sysCtrlSound(uint8_t buttons, uint8_t led, uint8_t eeVal) setRGBledBlueOff(); delayByte(200); digitalWriteRGB(led, RGB_ON); // turn on "acknowledge" LED - EEPROM.update(eepromAudioOnOff, eeVal); + eeprom_update_byte(eepromAudioOnOff, eeVal); delayShort(500); digitalWriteRGB(led, RGB_OFF); // turn off "acknowledge" LED @@ -1072,14 +1072,14 @@ bool Arduboy2Base::collide(Rect rect1, Rect rect2) uint16_t Arduboy2Base::readUnitID() { - return EEPROM.read(eepromUnitID) | - (((uint16_t)(EEPROM.read(eepromUnitID + 1))) << 8); + return eeprom_read_byte(eepromUnitID) | + (((uint16_t)(eeprom_read_byte(eepromUnitID + 1))) << 8); } void Arduboy2Base::writeUnitID(uint16_t id) { - EEPROM.update(eepromUnitID, (uint8_t)(id & 0xff)); - EEPROM.update(eepromUnitID + 1, (uint8_t)(id >> 8)); + eeprom_update_byte(eepromUnitID, (uint8_t)(id & 0xff)); + eeprom_update_byte(eepromUnitID + 1, (uint8_t)(id >> 8)); } uint8_t Arduboy2Base::readUnitName(char* name) @@ -1090,7 +1090,7 @@ uint8_t Arduboy2Base::readUnitName(char* name) for (dest = 0; dest < ARDUBOY_UNIT_NAME_LEN; dest++) { - val = EEPROM.read(src); + val = eeprom_read_byte(src); name[dest] = val; src++; if (val == 0x00 || (byte)val == 0xFF) { @@ -1113,48 +1113,48 @@ void Arduboy2Base::writeUnitName(const char* name) done = true; } // write character or 0 pad if finished - EEPROM.update(dest, done ? 0x00 : name[src]); + eeprom_update_byte(dest, done ? 0x00 : name[src]); dest++; } } bool Arduboy2Base::readShowBootLogoFlag() { - return (EEPROM.read(eepromSysFlags) & sysFlagShowLogoMask); + return (eeprom_read_byte(eepromSysFlags) & sysFlagShowLogoMask); } void Arduboy2Base::writeShowBootLogoFlag(bool val) { - uint8_t flags = EEPROM.read(eepromSysFlags); + uint8_t flags = eeprom_read_byte(eepromSysFlags); bitWrite(flags, sysFlagShowLogoBit, val); - EEPROM.update(eepromSysFlags, flags); + eeprom_update_byte(eepromSysFlags, flags); } bool Arduboy2Base::readShowUnitNameFlag() { - return (EEPROM.read(eepromSysFlags) & sysFlagUnameMask); + return (eeprom_read_byte(eepromSysFlags) & sysFlagUnameMask); } void Arduboy2Base::writeShowUnitNameFlag(bool val) { - uint8_t flags = EEPROM.read(eepromSysFlags); + uint8_t flags = eeprom_read_byte(eepromSysFlags); bitWrite(flags, sysFlagUnameBit, val); - EEPROM.update(eepromSysFlags, flags); + eeprom_update_byte(eepromSysFlags, flags); } bool Arduboy2Base::readShowBootLogoLEDsFlag() { - return (EEPROM.read(eepromSysFlags) & sysFlagShowLogoLEDsMask); + return (eeprom_read_byte(eepromSysFlags) & sysFlagShowLogoLEDsMask); } void Arduboy2Base::writeShowBootLogoLEDsFlag(bool val) { - uint8_t flags = EEPROM.read(eepromSysFlags); + uint8_t flags = eeprom_read_byte(eepromSysFlags); bitWrite(flags, sysFlagShowLogoLEDsBit, val); - EEPROM.update(eepromSysFlags, flags); + eeprom_update_byte(eepromSysFlags, flags); } void Arduboy2Base::swapInt16(int16_t& a, int16_t& b) @@ -1305,7 +1305,7 @@ void Arduboy2::bootLogoExtra() return; } - c = EEPROM.read(eepromUnitName); + c = eeprom_read_byte(eepromUnitName); if (c != 0xFF && c != 0x00) { @@ -1316,7 +1316,7 @@ void Arduboy2::bootLogoExtra() do { write(c); - c = EEPROM.read(++i); + c = eeprom_read_byte(++i); } while (i < eepromUnitName + ARDUBOY_UNIT_NAME_LEN); diff --git a/board-package-source/libraries/Arduboy2/src/Arduboy2.h b/board-package-source/libraries/Arduboy2/src/Arduboy2.h index f14ce1e..a6fdd60 100644 --- a/board-package-source/libraries/Arduboy2/src/Arduboy2.h +++ b/board-package-source/libraries/Arduboy2/src/Arduboy2.h @@ -8,7 +8,7 @@ #define ARDUBOY2_H #include -#include +#include #include "Arduboy2Core.h" #include "Arduboy2Audio.h" #include "Arduboy2Beep.h" diff --git a/board-package-source/libraries/Arduboy2/src/Arduboy2Core.cpp b/board-package-source/libraries/Arduboy2/src/Arduboy2Core.cpp index 8ab6490..1bb7790 100644 --- a/board-package-source/libraries/Arduboy2/src/Arduboy2Core.cpp +++ b/board-package-source/libraries/Arduboy2/src/Arduboy2Core.cpp @@ -901,6 +901,7 @@ void Arduboy2Core::paintScreen(uint8_t image[], bool clear) " inc r19 ;1 \n\t" " cpi r19,%[page_end] ;1 \n\t" " brne 1b ;1/2 \n\t" + " lpm r20, Z ;3 delay \n\t" " in __tmp_reg__, %[spsr] \n\t" //read SPSR to clear SPIF : [ptr] "+&z" (image) :