summaryrefslogtreecommitdiff
path: root/supervisor
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-09-01 10:29:10 -0500
committerJeff Epler <jepler@gmail.com>2020-09-01 10:55:45 -0500
commit9bd2a61d8b2ba56cef241f3b93aed50e718998b5 (patch)
tree4598f19c248f188d52e233daa11bd3b2b8139549 /supervisor
parent952d9bbb4a99cc598b56e170cdc05d94087d0d6d (diff)
supervisor: Always allocate at least a 1x1 terminal
Otherwise, out of range writes would occur in tilegrid_set_tile, causing a safe mode reset. ``` Hardware watchpoint 6: -location *stack_alloc->ptr Old value = 24652061 New value = 24641565 0x000444f2 in common_hal_displayio_tilegrid_set_tile (self=0x200002c8 <supervisor_terminal_text_grid>, x=1, y=1, tile_index=0 '\000') at ../../shared-module/displayio/TileGrid.c:236 236 if (!self->partial_change) { (gdb) ```
Diffstat (limited to 'supervisor')
-rw-r--r--supervisor/shared/display.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/supervisor/shared/display.c b/supervisor/shared/display.c
index 634720d0a..afb3f3a9a 100644
--- a/supervisor/shared/display.c
+++ b/supervisor/shared/display.c
@@ -65,10 +65,14 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) {
if (width_in_tiles < 80) {
scale = 1;
}
+
width_in_tiles = (width_px - blinka_bitmap.width * scale) / (grid->tile_width * scale);
+ if (width_in_tiles < 1) {
+ width_in_tiles = 1;
+ }
uint16_t height_in_tiles = height_px / (grid->tile_height * scale);
uint16_t remaining_pixels = height_px % (grid->tile_height * scale);
- if (remaining_pixels > 0) {
+ if (height_in_tiles < 1 || remaining_pixels > 0) {
height_in_tiles += 1;
}
@@ -94,6 +98,8 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) {
}
grid->width_in_tiles = width_in_tiles;
grid->height_in_tiles = height_in_tiles;
+ assert(width_in_tiles > 0);
+ assert(height_in_tiles > 0);
grid->pixel_width = width_in_tiles * grid->tile_width;
grid->pixel_height = height_in_tiles * grid->tile_height;
grid->tiles = tiles;