diff --git a/main.c b/main.c index 522484856e..c1244f36cb 100755 --- a/main.c +++ b/main.c @@ -229,6 +229,7 @@ bool run_code_py(safe_mode_t safe_mode) { MICROPY_VM_HOOK_LOOP #endif if (reload_requested) { + reload_requested = false; return true; } diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 7e7e894cbe..3f73d9a8f2 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -248,14 +248,20 @@ void reset_cpu(void) { reset(); } -extern uint32_t _ebss; -// Place the word to save just after our BSS section that gets blanked. +// Place the word to save 8k from the end of RAM so we and the bootloader don't clobber it. +#ifdef SAMD21 +uint32_t* safe_word = (uint32_t*) (HMCRAMC0_ADDR + HMCRAMC0_SIZE - 0x2000); +#endif +#ifdef SAMD51 +uint32_t* safe_word = (uint32_t*) (HSRAM_ADDR + HSRAM_SIZE - 0x2000); +#endif + void port_set_saved_word(uint32_t value) { - _ebss = value; + *safe_word = value; } uint32_t port_get_saved_word(void) { - return _ebss; + return *safe_word; } /** diff --git a/shared-bindings/displayio/Group.c b/shared-bindings/displayio/Group.c index 421dc1ae59..7b79f32291 100644 --- a/shared-bindings/displayio/Group.c +++ b/shared-bindings/displayio/Group.c @@ -256,7 +256,7 @@ STATIC mp_obj_t group_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t valu if (value == MP_OBJ_SENTINEL) { // load - return MP_OBJ_NEW_SMALL_INT(common_hal_displayio_group_get(self, index)); + return common_hal_displayio_group_get(self, index); } else if (value == mp_const_none) { common_hal_displayio_group_pop(self, index); } else { diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index adaad15057..b48057d1bc 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -98,7 +98,7 @@ size_t common_hal_displayio_group_get_len(displayio_group_t* self) { } mp_obj_t common_hal_displayio_group_get(displayio_group_t* self, size_t index) { - return self->children[index]; + return MP_OBJ_FROM_PTR(self->children[index]); } void common_hal_displayio_group_set(displayio_group_t* self, size_t index, mp_obj_t layer) { diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index e4f40a5f76..c2aa9b1444 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -72,9 +72,9 @@ void common_hal_displayio_tilegrid_get_position(displayio_tilegrid_t *self, int1 } void common_hal_displayio_tilegrid_set_position(displayio_tilegrid_t *self, int16_t x, int16_t y) { + self->needs_refresh = self->x != x || self->y != y; self->x = x; self->y = y; - self->needs_refresh = true; } mp_obj_t common_hal_displayio_tilegrid_get_pixel_shader(displayio_tilegrid_t *self) {