#include "vram.h" #include #include "game.h" #include "sdk/video.h" mem_xfer_t mem_xfer_queue[MAX_XFERS]; uint8_t mem_xfer_queue_size; void vram_init(void) { mem_xfer_queue_size = 0; } static inline void vram_xfer_row(uint8_t *dest, const uint8_t *source, uint8_t size) { while (size > 0) { *dest++ = *source++; if ((uint8_t)dest % 32 == 0) { dest -= 32; } size--; } } static inline void vram_xfer_col(uint8_t *dest, const uint8_t *source, uint8_t size) { while (size > 0) { *dest = *source++; dest += SCRN_VX_B; if ((uint16_t)dest >= _SCRN1) { dest -= _SCRN1 - _SCRN0; } size--; } } void vram_update(void) { mem_xfer_t *xfer = &mem_xfer_queue[0]; for (uint8_t i = 0; i < mem_xfer_queue_size; i++) { if (xfer->type == XFER_TYPE_ROW) { vram_xfer_row((uint8_t *)xfer->dest, xfer->source, xfer->size); } else { vram_xfer_col((uint8_t *)xfer->dest, xfer->source, xfer->size); } xfer++; } mem_xfer_queue_size = 0; }