====== gfx_sys.h ======
gfx_sys.h provides functions and macros related to low level graphics system functions
===== Defines =====
==== Sprite flips ====
* SPRITE_FLIP_NONE - Apply no sprite flip
* SPRITE_FLIP_X - Apply horizontal sprite flipping
* SPRITE_FLIP_Y - Apply vertical sprite flipping
* SPRITE_FLIP_BOTH - Apply sprite flipping on both axes
==== Sprite RAM Sections ====
* QUADRANT_0 - Upper left quadrant of Sprite RAM page
* QUADRANT_1 - Upper right quadrant of Sprite RAM page
* QUADRANT_2 - Bottom left quadrant of Sprite RAM page
* QUADRANT_3 - Bottom right quadrant of Sprite RAM page
===== Functions =====
==== init_graphics ====
void init_graphics();
Call this to initialize the graphics system and prepare it for sequential drawing. Should only need to be called once at the beginning of the program.
==== await_vsync ====
void await_vsync(int frames);
Call this to block execution until the next vsync (frames=1) or wait for a number of vsyncs to pass (frames>1). Best used at the end of drawing and updating the game state.
==== flip_pages ====
void flip_pages();
Switch which framebuffer is being drawn on and which framebuffer is being sent to the TV. Call this right after await_vsync for consistent timing.
==== await_drawing ====
void await_drawing();
Waits for the current draw operation to complete.
Graphics API calls that use the blitter will set the global `draw_busy` variable to 1, and this function waits for the interrupt to set it to zero.