mirror of https://github.com/PCSX2/pcsx2.git
108 lines
3.0 KiB
C
108 lines
3.0 KiB
C
/* PCSX2 - PS2 Emulator for PCs
|
|
* Copyright (C) 2002-2020 PCSX2 Dev Team
|
|
*
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
|
* of the GNU Lesser General Public License as published by the Free Software Found-
|
|
* ation, either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with PCSX2.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#ifndef u32
|
|
typedef unsigned int u32;
|
|
#endif
|
|
|
|
/*
|
|
Preamble cell-order cell-order
|
|
(last cell "0") (last cell "1")
|
|
----------------------------------------------
|
|
"B" 11101000 00010111
|
|
"M" 11100010 00011101
|
|
"W" 11100100 00011011
|
|
|
|
Only the lower 4 bits are used.
|
|
|
|
Preamble B: Marks a word containing data for channel A (left)
|
|
at the start of the data-block.
|
|
|
|
Preamble M: Marks a word with data for channel A that isn't
|
|
at the start of the data-block.
|
|
|
|
Preamble W: Marks a word containing data for channel B.
|
|
(right, for stereo). When using more than 2
|
|
channels, this could also be any other channel
|
|
(except for A).
|
|
|
|
bits meaning
|
|
----------------------------------------------------------
|
|
0-3 Preamble (see above; special structure)
|
|
|
|
4-7 Auxillary-audio-databits
|
|
|
|
8-27 Sample
|
|
(A 24-bit sample can be used (using bits 4-27).
|
|
A CD-player uses only 16 bits, so only bits
|
|
13 (LSB) to 27 (MSB) are used. Bits 4-12 are
|
|
set to 0).
|
|
|
|
28 Validity
|
|
(When this bit is set, the sample should not
|
|
be used by the receiver. A CD-player uses
|
|
the 'error-flag' to set this bit).
|
|
|
|
29 Subcode-data
|
|
|
|
30 Channel-status-information
|
|
|
|
31 Parity (bit 0-3 are not included)
|
|
|
|
*/
|
|
|
|
typedef struct _subframe
|
|
{
|
|
u32 preamble : 4;
|
|
u32 aux_data : 4;
|
|
u32 snd_data : 20;
|
|
u32 validity : 1;
|
|
u32 subcode : 1;
|
|
u32 chstatus : 1;
|
|
u32 parity : 1;
|
|
} subframe;
|
|
|
|
/*
|
|
bit meaning
|
|
-------------------------------------------------------------
|
|
0-3 controlbits:
|
|
bit 0: 0 (is set to 1 during 4 channel transmission)
|
|
bit 1: 0=Digital audio, 1=Non-audio (reserved to be 0 on old S/PDIF specs)
|
|
bit 2: copy-protection. Copying is allowed when this bit is set.
|
|
bit 3: is set when pre-emphasis is used.
|
|
|
|
4-7 0 (reserved)
|
|
|
|
9-15 catagory-code:
|
|
0 = common 2-channel format
|
|
1 = 2-channel CD-format
|
|
(set by a CD-player when a subcode is transmitted)
|
|
2 = 2-channel PCM-encoder-decoder format
|
|
|
|
others are not used
|
|
|
|
19-191 0 (reserved)
|
|
*/
|
|
|
|
typedef struct _chstatus
|
|
{
|
|
u8 ctrlbits : 4;
|
|
u8 reservd1 : 4;
|
|
u8 category;
|
|
u8 reservd2[22];
|
|
} chstatus;
|