sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

osPiRawStartDma.c (606B)


      1 #include "libultra_internal.h"
      2 #include "PR/rcp.h"
      3 #include "piint.h"
      4 
      5 s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size) {
      6     register u32 status;
      7 
      8     WAIT_ON_IO_BUSY(status);
      9 
     10     IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dram_addr));
     11 
     12     IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS((uintptr_t) osRomBase | cart_addr));
     13 
     14     switch (dir) {
     15         case OS_READ:
     16             IO_WRITE(PI_WR_LEN_REG, size - 1);
     17             break;
     18         case OS_WRITE:
     19             IO_WRITE(PI_RD_LEN_REG, size - 1);
     20             break;
     21         default:
     22             return -1;
     23     }
     24     return 0;
     25 }