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

  1. #include "vram.h"
  2. #include <string.h>
  3. #include "game.h"
  4. #include "sdk/video.h"
  5. mem_xfer_t mem_xfer_queue[MAX_XFERS];
  6. uint8_t mem_xfer_queue_size;
  7. void vram_init(void) { mem_xfer_queue_size = 0; }
  8. static inline void vram_xfer_row(uint8_t *dest, const uint8_t *source,
  9. uint8_t size) {
  10. while (size > 0) {
  11. *dest++ = *source++;
  12. if ((uint8_t)dest % 32 == 0) {
  13. dest -= 32;
  14. }
  15. size--;
  16. }
  17. }
  18. static inline void vram_xfer_col(uint8_t *dest, const uint8_t *source,
  19. uint8_t size) {
  20. while (size > 0) {
  21. *dest = *source++;
  22. dest += SCRN_VX_B;
  23. if ((uint16_t)dest >= _SCRN1) {
  24. dest -= _SCRN1 - _SCRN0;
  25. }
  26. size--;
  27. }
  28. }
  29. void vram_update(void) {
  30. mem_xfer_t *xfer = &mem_xfer_queue[0];
  31. for (uint8_t i = 0; i < mem_xfer_queue_size; i++) {
  32. if (xfer->type == XFER_TYPE_ROW) {
  33. vram_xfer_row((uint8_t *)xfer->dest, xfer->source, xfer->size);
  34. } else {
  35. vram_xfer_col((uint8_t *)xfer->dest, xfer->source, xfer->size);
  36. }
  37. xfer++;
  38. }
  39. mem_xfer_queue_size = 0;
  40. }