# HG changeset patch # User Paul Boddie # Date 1541288803 -3600 # Node ID 6c506a72cab09e32ee32403c1fe56582ebed51c4 # Parent 08938ad9d6014ef41f04ab9a7c859bbd72a3a0fe# Parent 3783422f5bdc58b409ca29021e046f3406989960 Merged concurrent changes. diff -r 08938ad9d601 -r 6c506a72cab0 examples/vga/main.c diff -r 08938ad9d601 -r 6c506a72cab0 include/vga_display.h --- a/include/vga_display.h Sun Nov 04 00:04:09 2018 +0100 +++ b/include/vga_display.h Sun Nov 04 00:46:43 2018 +0100 @@ -88,9 +88,10 @@ void vga_configure_zero_channel(int channel, int int_num, int initiating, uint32_t output); -/* Frame selection. */ +/* Access-related operations. */ void vga_set_frame(display_config_t *display_config); +void vga_wait_visible(void); /* Interrupt handlers. */ diff -r 08938ad9d601 -r 6c506a72cab0 lib/vga_display.c --- a/lib/vga_display.c Sun Nov 04 00:04:09 2018 +0100 +++ b/lib/vga_display.c Sun Nov 04 00:46:43 2018 +0100 @@ -251,11 +251,21 @@ void vga_set_frame(display_config_t *display_config) { + vga_wait_visible(); + vga_display.screen_start = display_config->screen_start; vga_display.screen_limit = display_config->screen_limit; vga_display.screen_size = display_config->screen_size; } +/* Wait for the visible region to be completed. */ + +void vga_wait_visible(void) +{ + while (((volatile void (*)()) vga_display.state_handler) == visible_active) + __asm__ __volatile__("wait"); +} + /* Display state machine interrupt handler. */