PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
vs_vtbp.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include "libsnd2_internal.h"
12
13static s16 vabid_old_2 = -1;
14
15s16 SsVabTransBodyPartly(u8 *addr, unsigned int bufsize, s16 vab_id)
16{
17 unsigned int bufsize_tmp;
18 int new_vabid;
19
20 if ( (u16)vab_id >= 0x11u || _svm_vab_used[vab_id] != 2 )
21 {
22 _spu_setInTransfer(0);
23 return -1;
24 }
25 if ( !_svm_vab_not_send_size )
26 {
27 vabid_old_2 = vab_id;
28 _svm_vab_not_send_size = _svm_vab_total[vab_id];
29 SpuSetTransferMode(SPU_TRANSFER_BY_DMA);
30 if ( !SpuSetTransferStartAddr(_svm_vab_start[vab_id]) )
31 {
32 _svm_vab_not_send_size = 0;
33 vabid_old_2 = -1;
34 _spu_setInTransfer(0);
35 return -1;
36 }
37 }
38 new_vabid = vabid_old_2;
39 if ( vabid_old_2 != vab_id )
40 {
41 _spu_setInTransfer(0);
42 return -1;
43 }
44 bufsize_tmp = bufsize;
45 if ( (unsigned int)_svm_vab_not_send_size < bufsize )
46 bufsize_tmp = _svm_vab_not_send_size;
47 _spu_setInTransfer(1);
48 SpuWritePartly(addr, bufsize_tmp);
49 _svm_vab_not_send_size -= bufsize_tmp;
50 if ( _svm_vab_not_send_size != 0 )
51 {
52 return -2;
53 }
54 vabid_old_2 = -1;
55 _svm_vab_not_send_size = 0;
56 _svm_vab_used[new_vabid] = 1;
57 return new_vabid;
58}