PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_do.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 "libspu2_internal.h"
12
13void SpuSetDigitalOut(int mode)
14{
15 s16 v1;
16 s16 v3;
17
18 v1 = *((vu16 *)0xBF9007C0);
19 v3 = *((vu16 *)0xBF9007C6);
20 switch ( mode & 0xF )
21 {
22 case SPU_SPDIF_OUT_OFF:
23 v1 &= ~0x128;
24 break;
25 case SPU_SPDIF_OUT_PCM:
26 v3 &= ~2;
27 v1 &= ~0x128;
28 v1 |= 0x20;
29 break;
30 case SPU_SPDIF_OUT_BITSTREAM:
31 v3 |= 2;
32 v1 &= ~0x128;
33 v1 |= 0x100;
34 break;
35 case SPU_SPDIF_OUT_BYPASS:
36 v1 &= ~0x128;
37 v1 |= 8;
38 break;
39 default:
40 break;
41 }
42 switch ( mode & 0xF0 )
43 {
44 case SPU_SPDIF_COPY_PROHIBIT:
45 v3 |= 0x8000;
46 break;
47 case SPU_SPDIF_COPY_NORMAL:
48 default:
49 v3 &= ~0x8000;
50 break;
51 }
52 switch ( mode & 0xF00 )
53 {
54 case SPU_SPDIF_MEDIA_DVD:
55 *((vu16 *)0xBF9007C8) = 512;
56 v3 |= 0x1800;
57 break;
58 case SPU_SPDIF_MEDIA_CD:
59 *((vu16 *)0xBF9007C8) = 0;
60 v3 &= ~0x1800;
61 break;
62 default:
63 *((vu16 *)0xBF9007C8) = 512;
64 v3 &= ~0x1800;
65 v3 |= 0x800;
66 break;
67 }
68 *((vu16 *)0xBF9007C0) = v1;
69 *((vu16 *)0xBF9007C6) = v3;
70}