|
|
- #include "vram.h"
-
- #include <string.h>
-
- #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;
- }
|