summaryrefslogtreecommitdiff
path: root/supervisor/shared/display.c
AgeCommit message (Collapse)Author
2020-11-28Use movable allocation system for terminal tilegrid.Christian Walther
Moving memory is now done by the infrastructure and neither necessary nor correct here anymore.
2020-11-28Add movable allocation system.Christian Walther
This allows calls to `allocate_memory()` while the VM is running, it will then allocate from the GC heap (unless there is a suitable hole among the supervisor allocations), and when the VM exits and the GC heap is freed, the allocation will be moved to the bottom of the former GC heap and transformed into a proper supervisor allocation. Existing movable allocations will also be moved to defragment the supervisor heap and ensure that the next VM run gets as much memory as possible for the GC heap. By itself this breaks terminalio because it violates the assumption that supervisor_display_move_memory() still has access to an undisturbed heap to copy the tilegrid from. It will work in many cases, but if you're unlucky you will get garbled terminal contents after exiting from the vm run that created the display. This will be fixed in the following commit, which is separate to simplify review.
2020-11-19displayio: When the display is tall, move blinka above the textJeff Epler
This makes a more useful display on the portrait magtag, allowing 21 characters across instead of just 18. There are 20 full rows of text, instead of 21. The total number of characters increases slightly from 378 to 420. For comparison, the Commodore VIC 20 had 22 rows of 23 characters for a total of 506 characters. :-P
2020-09-01supervisor: Always allocate at least a 1x1 terminalJeff Epler
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) ```
2020-08-17Turn off terminalio for ja and koScott Shawcroft
The font is missing many characters and the build needs the space. We can optimize font storage when we get a good font. The serial output will work as usual.
2020-08-12Fix build errors when SHARPDISPLAY && !RGBMATRIXJeff Epler
2020-08-12sharpmemory: Implement support for Sharp Memory Displays in framebufferioJeff Epler
2020-04-17RGBMatrix: finish renaming from ProtomatterJeff Epler
This gets all the purely internal references. Some uses of protomatter/Protomatter/PROTOMATTER remain, as they are references to symbols in the Protomatter C library itself.
2020-04-14displayio: swap colors in palettes tooJeff Epler
.. change the in-rom palette to be in RGB565 order
2020-04-14fix build for non-displayio & non-protomatter targetsJeff Epler
2020-04-14protomatter: more memory allocation fixesJeff Epler
- bump supervisor alloc count by 4 (we actually use 5) - move reconstruct to after gc heap is reset - destroy protomatter object entirely if not used by a FramebufferDisplay - ensure previous supervisor allocations are released - zero out pointers so GC can collect them
2019-12-16displayio: make 'rotation' property settableJeff Epler
2019-09-03Add .hidden to TileGrid and GroupScott Shawcroft
This allows for one to preserve ordering within a Group while hiding something temporarily. Fixes #1688
2019-08-22EPaper displays work mostly.Scott Shawcroft
2019-07-25Add knobs for SSD1322 and two fixes.Scott Shawcroft
* Fix terminal clear after first successful code.py run. * Fix transmitting too many bytes for column constraint with single byte bounds.
2019-07-19Add support for grayscale displays that are < 8 bit depth.Scott Shawcroft
This also improves Palette so it stores the original RGB888 colors. Lastly, it adds I2CDisplay as a display bus to talk over I2C. Particularly useful for the SSD1306. Fixes #1828. Fixes #1956
2019-06-26Properly reset the terminal each init.Scott Shawcroft
Fixes #1944
2019-06-12Add partial display update support.Scott Shawcroft
Different operations to the display tree have different costs. Be aware of these costs when optimizing your code. * Changing tiles indices in a TileGrid will update an area covering them all. * Changing a palette will refresh every object that references it. * Moving a TileGrid will update both where it was and where it moved to. * Adding something to a Group will refresh each individual area it covers. * Removing things from a Group will refresh one area that covers all previous locations. (Not separate areas like add.) * Setting a new top level Group will refresh the entire display. Only TileGrid moves are optimized for overlap. All other overlaps cause sending of duplicate pixels. This also adds flip_x, flip_y and transpose_xy to TileGrid. They change the direction of the pixels but not the location. Fixes #1169. Fixes #1705. Fixes #1923.
2019-05-22Make point 2 in areas exclusive and simplify full_coverage.Scott Shawcroft
2019-05-21Rework the pixel computation to use areasScott Shawcroft
This changes the displayio pixel computation from per-pixel to per-area. This is precursor work to updating portions of the screen (#1169). It should provide mild speedups because bounds checks are done once per area rather than once per pixel. Filling by area also allows TileGrid to maintain a row-associative fill pattern even when the display's refresh is orthogonal to it.
2019-04-04Support multi-byte values with BitmapScott Shawcroft
It also corrects the behavior of single byte values. Fixes #1744
2019-04-03Set the terminal tilegrid NULL after freeScott Shawcroft
Without this, a double free can occur when a display (and terminal) is released and then a crash occurs. Upon a second release, different memory is released (sometimes the heap). When this is followed by an allocation for the flash cache, the cache can overwrite the active heap causing crashes. Fixes #1667
2019-02-15Store the original layer in GroupScott Shawcroft
As is we would return the native superclass object only. Fixes #1551
2019-02-11A variety of displayio improvementsScott Shawcroft
This changes a number of things in displayio: * Introduces BuiltinFont and Glyph so the built in font can be used by libraries. For boards with a font it is available as board.TERMINAL_FONT. Fixes #1172 * Remove _load_row from Bitmap in favor of bitmap[] access. Index can be x/y tuple or overall index. Fixes #1191 * Add width and height properties to Bitmap. * Add insert and [] access to Group. Fixes #1518 * Add index param to pop on Group. * Terminal no longer takes unicode character info. It takes a BuiltinFont instead. * Fix Terminal's handling of [###D vt100 commands used when up arrowing into repl history. * Add x and y positions to Group plus scale as well. * Add bitmap accessor for BuiltinFont
2019-02-01Fix built-in inits and terminal allocateScott Shawcroft
2019-01-31Fix hallowing and nrf buildsScott Shawcroft
2019-01-31Remove Sprite referencesScott Shawcroft
2019-01-31More improvements to Terminal:Scott Shawcroft
* Fix Hallowing. * Fix builds without displayio. * Fix y bounds that appears as untrollable row of pixels. * Add scrolling to TileGrid. * Remove Sprite to save space. TileGrid is a drop in replacement.
2019-01-31Hook up the terminal based on the first display.Scott Shawcroft