spu.c: do not assume 64-byte blocks on SsUpload
This commit is contained in:
parent
d78c64ba7c
commit
ec53e6d22f
|
@ -164,6 +164,8 @@ void SsUpload(const void *addr, int size, int spu_addr)
|
|||
|
||||
while(size > 0)
|
||||
{
|
||||
int n = size / sizeof *ptr > 32 ? 32 : size / sizeof *ptr;
|
||||
|
||||
SPU_STATUS = 4; // Sound RAM Data Transfer Control
|
||||
SPU_CONTROL = SPU_CONTROL & ~0x30; // SPUCNT.transfer_mode = 0 (STOP)
|
||||
|
||||
|
@ -173,7 +175,7 @@ void SsUpload(const void *addr, int size, int spu_addr)
|
|||
|
||||
SPU_ADDR = spu_addr >> 3;
|
||||
|
||||
for(i = 0; i < 32; i++)
|
||||
for(i = 0; i < n; i++)
|
||||
SPU_DATA = ptr[i];
|
||||
|
||||
SPU_CONTROL = (SPU_CONTROL & ~0x30) | 16; // SPUCNT.transfer_mode = 1 (MANUAL)
|
||||
|
@ -183,9 +185,9 @@ void SsUpload(const void *addr, int size, int spu_addr)
|
|||
|
||||
while(SPU_STATUS2 & 0x400); // wait for transfer busy bit to be cleared
|
||||
|
||||
spu_addr += 64;
|
||||
ptr += 32;
|
||||
size-=64;
|
||||
spu_addr += n * sizeof *ptr;
|
||||
ptr += n;
|
||||
size-=n * sizeof *ptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue