lol its in c
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

47 lines
1.2 KiB

#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;
}