diff --git a/BaS_gcc/sys/interrupts.c b/BaS_gcc/sys/interrupts.c index 97a8114..eb08184 100644 --- a/BaS_gcc/sys/interrupts.c +++ b/BaS_gcc/sys/interrupts.c @@ -243,6 +243,8 @@ extern int32_t video_tlb; void video_addr_timeout(void) { uint32_t addr = 0x0L; + uint32_t *src; + uint32_t *dst; uint32_t asid; dbg("%s:\r\n", __FUNCTION__); @@ -300,8 +302,27 @@ void video_addr_timeout(void) MCF_MMU_MMUTR_SG | MCF_MMU_MMUTR_V; } + + + MCF_MMU_MMUTR = addr; + MCF_MMU_MMUDR = page_attr; + MCF_MMU_MMUOR = + MCF_MMU_MMUOR_STLB | + MCF_MMU_MMUOR_ADR | + MCF_MMU_MMUOR_ACC | + MCF_MMU_MMUOR_UAA; + NOP(); + + dst = 0x60000000 + addr; + src = addr; + while (dst < 0x60000000 + addr + 0x10000) + { + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + } - /* TODO: update MMU */ addr += 0x100000;