Don't crash when N64's framebuffer exceeds 8MB. Wrap aroudn in that case.

This commit is contained in:
Jason Benaim 2022-10-01 23:46:23 -07:00
parent 73ad38ca3f
commit ee6db7d803
2 changed files with 3 additions and 2 deletions

View file

@ -13,6 +13,7 @@
#include "common.h"
#define MAX_RDRAM_SIZE 0x800000U
#define MAX_RDRAM_SIZE_MASK (MAX_RDRAM_SIZE - 1U)
enum rdram_register {
#define X(reg) reg,

View file

@ -122,14 +122,14 @@ void vi_cycle(struct vi_controller *vi) {
window->frame_type = 0;
// Copy the frame data into a temporary buffer.
copy_size = sizeof(bus->ri->ram) - (vi->regs[VI_ORIGIN_REG] & 0xFFFFFF);
copy_size = sizeof(bus->ri->ram) - (vi->regs[VI_ORIGIN_REG] & MAX_RDRAM_SIZE_MASK);
if (copy_size > sizeof(vi->window->frame_buffer))
copy_size = sizeof(vi->window->frame_buffer);
memcpy(&bus, vi, sizeof(bus));
memcpy(vi->window->frame_buffer,
bus->ri->ram + (vi->regs[VI_ORIGIN_REG] & 0xFFFFFF),
bus->ri->ram + (vi->regs[VI_ORIGIN_REG] & MAX_RDRAM_SIZE_MASK),
copy_size);
cen64_mutex_unlock(&vi->window->render_mutex);