diff --git a/board-package-source/libraries/ArduboyFX/library.properties b/board-package-source/libraries/ArduboyFX/library.properties index d3ecefc..ef88a4b 100644 --- a/board-package-source/libraries/ArduboyFX/library.properties +++ b/board-package-source/libraries/ArduboyFX/library.properties @@ -1,5 +1,5 @@ name=ArduboyFX -version=1.0.9 +version=1.0.10 author=Mr.Blinky maintainer=mstr.blinky@gmail.com sentence=The Arduboy FX library. diff --git a/board-package-source/libraries/ArduboyFX/src/ArduboyFX.cpp b/board-package-source/libraries/ArduboyFX/src/ArduboyFX.cpp index 758480b..674c9f7 100644 --- a/board-package-source/libraries/ArduboyFX/src/ArduboyFX.cpp +++ b/board-package-source/libraries/ArduboyFX/src/ArduboyFX.cpp @@ -250,6 +250,7 @@ void FX::seekData(uint24_t address) void FX::seekDataArray(uint24_t address, uint8_t index, uint8_t offset, uint8_t elementSize) { #ifdef ARDUINO_ARCH_AVR + register uint24_t addr asm("r22") = address; asm volatile ( " mul %[index], %[size] \n" @@ -258,21 +259,20 @@ void FX::seekDataArray(uint24_t address, uint8_t index, uint8_t offset, uint8_t " clr r21 \n" //use as alternative zero reg " add r0, %[offset] \n" " adc r1, r21 \n" - " add %A[address], r0 \n" - " adc %B[address], r1 \n" - " adc %C[address], r21 \n" + " add %A[addr], r0 \n" + " adc %B[addr], r1 \n" + " adc %C[addr], r21 \n" " clr r1 \n" " jmp %x4 \n" //seekData - : + : [addr] "+r" (addr) : [index] "r" (index), [offset] "r" (offset), [size] "r" (elementSize), - [address] "r" (address), "" (seekData) : "r21" ); #else - address += size ? index * size + offset : index * 256 + offset; + address += elementSize ? index * elementSize + offset : index * 256 + offset; seekData(address); #endif } @@ -648,9 +648,9 @@ void FX::saveGameState(const uint8_t* gameState, size_t size) // ~152 bytes loca "ld r24, z+ \n" //saveState "call %x7 \n" //writeByte "asr r23 \n" //shiftstate >>= 1 - "brcc .+4 \n" //if (shiftstate == -1) size-- + "brcc .+6 \n" //if (shiftstate == -1) size-- "subi r18, 1 \n" - "sbci r19, 0 \n" + "sbci r19, 0 \n" "breq 6f \n" //size == 0 " \n" "adiw r26, 1 \n" //addr++ @@ -1141,10 +1141,10 @@ uint24_t FX::drawFrame(uint24_t address) //~94 bytes ); return address; #else - seekData(address); - address += sizeof(f); for(;;) { + seekData(address); + address += sizeof(f); f.x = readPendingUInt16(); f.y = readPendingUInt16(); f.bmp = readPendingUInt24(); diff --git a/board-package-source/programmers.txt b/board-package-source/programmers.txt new file mode 100644 index 0000000..40532f5 --- /dev/null +++ b/board-package-source/programmers.txt @@ -0,0 +1,130 @@ +avrisp.name=AVR ISP +avrisp.communication=serial +avrisp.protocol=stk500v1 +avrisp.program.protocol=stk500v1 +avrisp.program.tool=avrdude +avrisp.program.tool.default=avrdude +avrisp.program.extra_params=-P{serial.port} + +avrispmkii.name=AVRISP mkII +avrispmkii.communication=usb +avrispmkii.protocol=stk500v2 +avrispmkii.program.protocol=stk500v2 +avrispmkii.program.tool=avrdude +avrispmkii.program.tool.default=avrdude +avrispmkii.program.extra_params=-Pusb + +usbtinyisp.name=USBtinyISP +usbtinyisp.protocol=usbtiny +usbtinyisp.program.tool=avrdude +usbtinyisp.program.tool.default=avrdude +usbtinyisp.program.extra_params= + +arduinoisp.name=ArduinoISP +arduinoisp.protocol=arduinoisp +arduinoisp.program.tool=avrdude +arduinoisp.program.tool.default=avrdude +arduinoisp.program.extra_params= + +arduinoisporg.name=ArduinoISP.org +arduinoisporg.protocol=arduinoisporg +arduinoisporg.program.tool=avrdude +arduinoisporg.program.tool.default=avrdude +arduinoisporg.program.extra_params= + +usbasp.name=USBasp +usbasp.communication=usb +usbasp.protocol=usbasp +usbasp.program.protocol=usbasp +usbasp.program.tool=avrdude +usbasp.program.tool.default=avrdude +usbasp.program.extra_params=-Pusb + +parallel.name=Parallel Programmer +parallel.protocol=dapa +parallel.force=true +# parallel.delay=200 +parallel.program.tool=avrdude +parallel.program.tool.default=avrdude +parallel.program.extra_params=-F + +arduinoasisp.name=Arduino as ISP +arduinoasisp.communication=serial +arduinoasisp.protocol=stk500v1 +arduinoasisp.speed=19200 +arduinoasisp.program.protocol=stk500v1 +arduinoasisp.program.speed=19200 +arduinoasisp.program.tool=avrdude +arduinoasisp.program.tool.default=avrdude +arduinoasisp.program.extra_params=-P{serial.port} -b{program.speed} + +arduinoasispatmega32u4.name=Arduino as ISP (ATmega32U4) +arduinoasispatmega32u4.communication=serial +arduinoasispatmega32u4.protocol=arduino +arduinoasispatmega32u4.speed=19200 +arduinoasispatmega32u4.program.protocol=arduino +arduinoasispatmega32u4.program.speed=19200 +arduinoasispatmega32u4.program.tool=avrdude +arduinoasispatmega32u4.program.tool.default=avrdude +arduinoasispatmega32u4.program.extra_params=-P{serial.port} -b{program.speed} + +usbGemma.name=Arduino Gemma +usbGemma.protocol=arduinogemma +usbGemma.program.tool=avrdude +usbGemma.program.tool.default=avrdude +usbGemma.program.extra_params= +usbGemma.config.path={runtime.platform.path}/bootloaders/gemma/avrdude.conf + +## Notes about Dangerous Prototypes Bus Pirate as ISP +## Bus Pirate V3 need Firmware v5.10 or later +## Bus Pirate V4 need Firmware v6.3-r2151 or later +## Could happen that BP does not have enough current to power an Arduino board +## through the ICSP connector. In this case disconnect the +Vcc from ICSP connector +## and power Arduino board in the normal way. +buspirate.name=BusPirate as ISP +buspirate.communication=serial +buspirate.protocol=buspirate +buspirate.program.protocol=buspirate +buspirate.program.tool=avrdude +buspirate.program.tool.default=avrdude +buspirate.program.extra_params=-P{serial.port} + +# STK500 firmware version v1 and v2 use different serial protocols. +# Using the 'stk500' protocol tells avrdude to try and autodetect the +# firmware version. If this leads to problems, we might need to add +# stk500v1 and stk500v2 entries to allow explicitly selecting the +# firmware version. +stk500.name=Atmel STK500 development board +stk500.communication=serial +stk500.protocol=stk500 +stk500.program.protocol=stk500 +stk500.program.tool=avrdude +stk500.program.tool.default=avrdude +stk500.program.extra_params=-P{serial.port} + +jtag3isp.name=Atmel JTAGICE3 (ISP mode) +jtag3isp.communication=usb +jtag3isp.protocol=jtag3isp +jtag3isp.program.protocol=jtag3isp +jtag3isp.program.tool=avrdude +jtag3isp.program.tool.default=avrdude +jtag3isp.program.extra_params= + +jtag3.name=Atmel JTAGICE3 (JTAG mode) +jtag3.communication=usb +jtag3.protocol=jtag3 +jtag3.program.protocol=jtag3 +jtag3.program.tool=avrdude +jtag3.program.tool.default=avrdude +# Set a bitclock of 0.1us (the fastest supported value). This should +# work regardless of the crystal used, since JTAG doesn't use the MCU +# clock but dictates its own clock. +jtag3.program.extra_params=-B0.1 + +atmel_ice.name=Atmel-ICE (AVR) +atmel_ice.communication=usb +atmel_ice.protocol=atmelice_isp +atmel_ice.program.protocol=atmelice_isp +atmel_ice.program.tool=avrdude +atmel_ice.program.tool.default=avrdude +atmel_ice.program.extra_params=-Pusb